{"version":3,"file":"app/vendors-node_modules_webex_internal-media-core_dist_esm_index_js.22e90292.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAwE;AACJ;AACY;AACA;;AAEhF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,SAAS;AACT;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,gBAAgB;AAChB,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,iBAAiB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kDAAkD,OAAO;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA,gEAAgE,+CAA+C;AAC/G,gEAAgE,kCAAkC;AAClG;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB;AACA;AACA;AACA,KAAK;AACL,IAAI,uFAAqB;AACzB,cAAc,uFAAqB;AACnC,mBAAmB,uFAAqB;AACxC,iBAAiB,uFAAqB;AACtC,gBAAgB,uFAAqB;AACrC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,CAAC,0CAA0C;;AAE3C,8DAA8D,6CAA6C;AAC3G,8DAA8D,kCAAkC;AAChG;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,uFAAqB;AACzB,IAAI,uFAAqB;AACzB,mBAAmB,uFAAqB;AACxC;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,IAAI,uFAAqB;AACzB;AACA;AACA;AACA;AACA,WAAW,mFAAiB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,uFAAqB;AACjC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,oCAAoC,uFAAqB;AACzD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,2BAA2B,uFAAqB;AAChD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,mFAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;AACD;AACA,cAAc,mFAAiB;AAC/B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,QAAQ;AACR;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,CAAC;AACD;AACA,cAAc,mFAAiB;AAC/B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,QAAQ;AACR;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,CAAC;AACD;AACA,cAAc,mFAAiB;AAC/B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,QAAQ;AACR;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mFAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mFAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mFAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,mFAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mFAAiB;AACzB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mFAAiB;AACpC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mFAAiB;AAChC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA,IAAI,iFAAe;AACnB;AACA;AACA;AACA;AACA;;AAEA,6CAA6C,gCAAgC,oCAAoC,oDAAoD,6DAA6D,iEAAiE,sCAAsC;AACzU,mCAAmC,gBAAgB,sBAAsB,OAAO,uDAAuD,+DAA+D,iFAAe,6BAA6B,sKAAsK,mFAAmF,KAAK;AAChf;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,6CAA6C,gCAAgC,oCAAoC,oDAAoD,6DAA6D,iEAAiE,sCAAsC;AACzU,mCAAmC,gBAAgB,sBAAsB,OAAO,uDAAuD,+DAA+D,iFAAe,6BAA6B,sKAAsK,mFAAmF,KAAK;AAChf;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,6CAA6C,gCAAgC,oCAAoC,oDAAoD,6DAA6D,iEAAiE,sCAAsC;AACzU,mCAAmC,gBAAgB,sBAAsB,OAAO,uDAAuD,+DAA+D,iFAAe,6BAA6B,sKAAsK,mFAAmF,KAAK;AAChf;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,6CAA6C,gCAAgC,oCAAoC,oDAAoD,6DAA6D,iEAAiE,sCAAsC;AACzU,mCAAmC,gBAAgB,sBAAsB,OAAO,uDAAuD,+DAA+D,iFAAe,6BAA6B,sKAAsK,mFAAmF,KAAK;AAChf;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,6CAA6C,gCAAgC,oCAAoC,oDAAoD,6DAA6D,iEAAiE,sCAAsC;AACzU,mCAAmC,gBAAgB,sBAAsB,OAAO,uDAAuD,+DAA+D,iFAAe,6BAA6B,sKAAsK,mFAAmF,KAAK;AAChf;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,wHAAwH,qBAAM,mBAAmB,qBAAM;;AAEvJ;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS;AAClB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,uBAAuB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,eAAe,OAAO;AACtB,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,eAAe,OAAO;AACtB,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,qBAAM,mBAAmB,qBAAM;AACtD;AACA,6CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AA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C;AAC/C;AACA;AACA;AACA,kCAAkC,QAAQ,oCAAoC,+CAA+C,4DAA4D,QAAQ,8EAA8E,EAAE,gGAAgG,kEAAkE,EAAE,+FAA+F,iEAAiE,EAAE;AACvlB;AACA,gGAAgG;AAChG,8FAA8F;AAC9F,+EAA+E,8DAA8D,oEAAoE,mDAAmD,iCAAiC,yDAAyD;AAC9V;AACA;AACA;AACA,wCAAwC,gBAAgB;AACxD;AACA;AACA;AACA,4BAA4B,yDAAyD;AACrF;AACA;AACA;AACA,gCAAgC,6DAA6D;AAC7F;AACA;AACA;AACA,+BAA+B,4DAA4D;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4EAA4E,YAAY,SAAS,mCAAmC,2CAA2C;AACtM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,iDAAiD;AACzF;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA,2BAA2B,6BAA6B;AACxD;AACA;AACA;AACA;AACA;AACA,wCAAwC,iDAAiD;AACzF;AACA;AACA;AACA,gGAAgG;AAChG;AACA;AACA;AACA;AACA,6BAA6B,kDAAkD,mDAAmD,8DAA8D,eAAe,GAAG,GAAG;AACrN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kDAAkD,iDAAiD,4DAA4D,cAAc,GAAG,GAAG;AAC/M;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,kDAAkD,OAAO;AACjG;AACA;AACA;AACA,8BAA8B,gLAAgL,yCAAyC,0FAA0F,GAAG,0DAA0D,gBAAgB,4EAA4E,GAAG,GAAG;AAChf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,kDAAkD,2DAA2D,4EAA4E,GAAG,GAAG;AACxO;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA,6BAA6B,iCAAiC;AAC9D;AACA;AACA;AACA,8BAA8B,kCAAkC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6BAA6B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kCAAkC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,mCAAmC;AAC7D;AACA;AACA;AACA,+BAA+B,kCAAkC;AACjE;AACA;AACA;AACA,kCAAkC,kDAAkD,OAAO;AAC3F,sGAAsG,oBAAoB,sDAAsD,yCAAyC;AACzN,kCAAkC,4CAA4C,OAAO;AACrF,kHAAkH,yDAAyD;AAC3K,oCAAoC,0CAA0C,EAAE;AAChF,sGAAsG,oBAAoB,kBAAkB,iCAAiC,mEAAmE,iFAAiF,IAAI,2CAA2C,4KAA4K,cAAc,YAAY;AACtjB;AACA;AACA;AACA,qBAAqB,kBAAkB;AACvC,cAAc;AACd,uBAAuB;AACvB,eAAe,8CAA8C;AAC7D,kCAAkC;AAClC,mCAAmC,kBAAkB,uCAAuC;AAC5F,2BAA2B,wCAAwC,QAAQ,cAAc,KAAK,oBAAoB,kDAAkD,4BAA4B,gBAAgB,4CAA4C;AAC5P,uDAAuD,QAAQ,yBAAyB;AACxF,uCAAuC,uCAAuC,qCAAqC,qCAAqC,qCAAqC,uCAAuC,oCAAoC,oDAAoD;AAC5T;AACA,+DAA+D,4BAA4B,0CAA0C,mBAAmB;AACxJ,EAAE,4BAA4B;AAC9B,qCAAqC;AACrC,iCAAiC,oCAAoC;AACrE,6BAA6B,iCAAiC;AAC9D,oCAAoC,yCAAyC,qCAAqC,wBAAwB,qCAAqC,wBAAwB,qCAAqC,sBAAsB,oCAAoC,sBAAsB,oCAAoC,wBAAwB,qCAAqC,2BAA2B,4CAA4C,2CAA2C,iCAAiC,4CAA4C,yCAAyC;AACroB,sCAAsC,uCAAuC,0BAA0B,YAAY,oBAAoB;AACvI,uCAAuC,uBAAuB,EAAE;AAChE,YAAY;AACZ,aAAa,wDAAwD,8CAA8C,8CAA8C,4CAA4C,kDAAkD,4CAA4C,4CAA4C,8CAA8C;AACrY,cAAc,IAAI;AAClB;AACA;AACA,iCAAiC,kBAAkB;AACnD;AACA,gCAAgC;AAChC,6BAA6B;AAC7B,2CAA2C,mDAAmD,oDAAoD;AAClJ,2BAA2B,iCAAiC;AAC5D;AACA,0BAA0B;AAC1B,uGAAuG,UAAU,2BAA2B;AAC5I,sDAAsD;AACtD;AACA,8CAA8C,oBAAoB,wFAAwF;AAC1J,iBAAiB,0CAA0C;AAC3D;AACA,gCAAgC;AAChC,oEAAoE,uDAAuD;AAC3H,iCAAiC,kBAAkB,mBAAmB,kCAAkC;AACxG,8CAA8C,qBAAqB,eAAe,gCAAgC,+DAA+D,0BAA0B,iBAAiB,0BAA0B,MAAM,4DAA4D,MAAM,oBAAoB,6BAA6B,MAAM,gHAAgH,MAAM;AAC3e,8CAA8C,mBAAmB,qDAAqD,oBAAoB,mDAAmD,mBAAmB,qDAAqD,oBAAoB,qDAAqD,oBAAoB,oCAAoC,wCAAwC;AAC9a;AACA,qCAAqC,6DAA6D,0DAA0D;AAC5J,sCAAsC;AACtC,mBAAmB,uBAAuB,MAAM,iCAAiC,6BAA6B,iCAAiC,gBAAgB,uBAAuB,qBAAqB,YAAY,8BAA8B,sBAAsB,2DAA2D,kDAAkD,EAAE,8CAA8C,yDAAyD,gBAAgB,uBAAuB,6BAA6B,8BAA8B,8BAA8B,GAAG,iBAAiB,wBAAwB,4BAA4B,iCAAiC,gCAAgC,GAAG,WAAW,kBAAkB,yCAAyC,gDAAgD,oBAAoB,GAAG,cAAc,qBAAqB,oCAAoC,wCAAwC,oCAAoC,yCAAyC,0BAA0B,GAAG,gCAAgC,kDAAkD,2BAA2B,kCAAkC,0CAA0C,OAAO,oCAAoC,MAAM,MAAM,MAAM,sBAAsB,gDAAgD,sEAAsE,4BAA4B,wEAAwE,8BAA8B,sEAAsE,4BAA4B,8BAA8B,mCAAmC,4GAA4G,oCAAoC,4GAA4G,oDAAoD,8CAA8C,+BAA+B,cAAc,YAAY,cAAc,MAAM,iCAAiC,eAAe,aAAa,wBAAwB,uGAAuG,uBAAuB,uDAAuD,mDAAmD,qCAAqC,wCAAwC,WAAW,wSAAwS,uCAAuC,+BAA+B,yMAAyM,gDAAgD,gTAAgT,kDAAkD,0CAA0C,kGAAkG,gBAAgB,qDAAqD,iBAAiB,mBAAmB,qBAAqB,uBAAuB,2BAA2B,wCAAwC,wCAAwC,qBAAqB,6JAA6J,kBAAkB,8BAA8B,6BAA6B,iBAAiB,wCAAwC,uFAAuF,iBAAiB,wBAAwB,2CAA2C,gCAAgC,GAAG,eAAe,6BAA6B,qBAAqB,sBAAsB,sBAAsB,iCAAiC,aAAa,iDAAiD,eAAe,sBAAsB,0CAA0C,gDAAgD,sDAAsD,4DAA4D,wDAAwD,8DAA8D,qEAAqE,4BAA4B,GAAG,aAAa,8CAA8C,6BAA6B,+BAA+B,sBAAsB,WAAW,0IAA0I,mCAAmC,2BAA2B,wEAAwE,4BAA4B,oBAAoB,mIAAmI,sBAAsB,6BAA6B,mBAAmB,wBAAwB,WAAW,6FAA6F,qCAAqC,6BAA6B,4EAA4E,yBAAyB,gCAAgC,4CAA4C,WAAW,0EAA0E,wCAAwC,gCAAgC,4DAA4D,oCAAoC,kDAAkD,4BAA4B,qKAAqK,kCAAkC,kDAAkD,0BAA0B,qKAAqK,8BAA8B,6DAA6D,oCAAoC,2BAA2B,2BAA2B,gCAAgC,cAAc,8CAA8C,gCAAgC,wBAAwB,qLAAqL,yCAAyC,4FAA4F,4BAA4B,iCAAiC,mBAAmB,iCAAiC,2CAA2C,mCAAmC,sLAAsL,+BAA+B,sCAAsC,wDAAwD,WAAW,sFAAsF,8CAA8C,sCAAsC,wEAAwE,2BAA2B,iBAAiB,cAAc,WAAW,0DAA0D,0CAA0C,kCAAkC,+CAA+C,mDAAmD,6BAA6B,iDAAiD,mCAAmC,qCAAqC,cAAc,+CAA+C,sCAAsC,wCAAwC,cAAc,kDAAkD,+CAA+C,6BAA6B,qFAAqF,mBAAmB,qCAAqC,mCAAmC,uCAAuC,wCAAwC,WAAW,qQAAqQ,4CAA4C,oCAAoC,6KAA6K,0FAA0F,oYAAoY,gCAAgC,uCAAuC,0DAA0D,WAAW,2GAA2G,+CAA+C,uCAAuC,0EAA0E,sBAAsB,mEAAmE,4EAA4E,mBAAmB,2CAA2C,aAAa,qDAAqD,4BAA4B,WAAW,uOAAuO,4CAA4C,+BAA+B,cAAc,mFAAmF,cAAc,0DAA0D,cAAc,iEAAiE,cAAc,4EAA4E,wBAAwB,4FAA4F,2BAA2B,aAAa,0CAA0C,+CAA+C,uCAAuC,2CAA2C,sBAAsB,UAAU,OAAO,8BAA8B,0BAA0B,gCAAgC,sBAAsB,MAAM,iFAAiF,gBAAgB,kFAAkF,SAAS,qBAAqB,gCAAgC,6BAA6B,qBAAqB,4BAA4B,mDAAmD,kEAAkE,+EAA+E,iFAAiF,wCAAwC,GAAG,wCAAwC,sCAAsC,oFAAoF,uFAAuF,QAAQ,8BAA8B,qCAAqC,oCAAoC,0BAA0B,oCAAoC,uCAAuC,wCAAwC,6BAA6B,+BAA+B,+FAA+F,yCAAyC,gDAAgD,YAAY,oBAAoB,uBAAuB,OAAO,8EAA8E,wHAAwH,yDAAyD,sEAAsE,sHAAsH,mEAAmE,0DAA0D,iBAAiB,6EAA6E,EAAE,+BAA+B,MAAM,qGAAqG,0FAA0F,OAAO,2JAA2J,qIAAqI,uEAAuE,6EAA6E,oIAAoI,0EAA0E,wEAAwE,cAAc,kEAAkE,EAAE,sCAAsC,MAAM,2GAA2G,qCAAqC,UAAU,2DAA2D,OAAO,gKAAgK,EAAE,yGAAyG,uMAAuM,kEAAkE,4EAA4E,+HAA+H,yEAAyE,mEAAmE,cAAc,kEAAkE,EAAE,qCAAqC,MAAM,sGAAsG,gBAAgB,mFAAmF,4FAA4F,QAAQ,4DAA4D,IAAI,QAAQ,QAAQ,8CAA8C,oCAAoC,6CAA6C,oFAAoF,QAAQ,kDAAkD,sDAAsD,uCAAuC,mDAAmD,2FAA2F,QAAQ,wDAAwD,gEAAgE,8CAA8C,oEAAoE,4GAA4G,QAAQ,yEAAyE,0DAA0D,wCAAwC,wDAAwD,kGAAkG,QAAQ,6DAA6D,6DAA6D,2CAA2C,8DAA8D,wGAAwG,QAAQ,mEAAmE,yDAAyD,uCAAuC,sDAAsD,gGAAgG,QAAQ,2DAA2D,4DAA4D,0CAA0C,4DAA4D,sGAAsG,QAAQ,iEAAiE,MAAM,+CAA+C,wBAAwB,0BAA0B,QAAQ,aAAa,4BAA4B,sEAAsE,4EAA4E,8EAA8E,4BAA4B,OAAO,0DAA0D,gBAAgB,EAAE,2DAA2D,wFAAwF,4CAA4C,OAAO,oIAAoI,yDAAyD,sGAAsG,iCAAiC,oEAAoE,0EAA0E,MAAM,4FAA4F,MAAM,2DAA2D,mEAAmE,8CAA8C,6CAA6C,4DAA4D,mEAAmE,kDAAkD,aAAa,yJAAyJ,4DAA4D,uEAAuE,MAAM,wDAAwD,mEAAmE,qFAAqF,qEAAqE,uDAAuD,iHAAiH,gEAAgE,wHAAwH,wCAAwC,2EAA2E,wFAAwF,MAAM,mGAAmG,MAAM,kEAAkE,qFAAqF,yDAAyD,2DAA2D,0EAA0E,8EAA8E,6DAA6D,aAAa,2KAA2K,mEAAmE,8EAA8E,MAAM,+DAA+D,qDAAqD,8GAA8G,+DAA+D,qHAAqH,uCAAuC,0EAA0E,sFAAsF,MAAM,kGAAkG,MAAM,iEAAiE,kFAAkF,uDAAuD,yDAAyD,wEAAwE,4EAA4E,2DAA2D,aAAa,wKAAwK,kEAAkE,6EAA6E,MAAM,+DAA+D,kBAAkB,yBAAyB,2DAA2D,uDAAuD,+DAA+D,qDAAqD,qEAAqE,iEAAiE,iEAAiE,iEAAiE,mEAAmE,iDAAiD,sEAAsE,kCAAkC,GAAG,gBAAgB,kBAAkB,yEAAyE,eAAe,uBAAuB,4KAA4K,cAAc,YAAY;AACljyB;AACA;AACA;AACA,qBAAqB,kBAAkB;AACvC,cAAc;AACd,uBAAuB;AACvB,eAAe,8CAA8C;AAC7D,kCAAkC;AAClC,mCAAmC,kBAAkB,uCAAuC;AAC5F,2BAA2B,wCAAwC,QAAQ,cAAc,KAAK,oBAAoB,kDAAkD,4BAA4B,gBAAgB,4CAA4C;AAC5P,uDAAuD,QAAQ,yBAAyB;AACxF,uCAAuC,uCAAuC,qCAAqC,qCAAqC,qCAAqC,uCAAuC,oCAAoC,oDAAoD;AAC5T;AACA,+DAA+D,4BAA4B,0CAA0C,mBAAmB;AACxJ,EAAE,4BAA4B;AAC9B,qCAAqC;AACrC,iCAAiC,oCAAoC;AACrE,6BAA6B,iCAAiC;AAC9D,oCAAoC,yCAAyC,qCAAqC,wBAAwB,qCAAqC,wBAAwB,qCAAqC,sBAAsB,oCAAoC,sBAAsB,oCAAoC,wBAAwB,qCAAqC,2BAA2B,4CAA4C,2CAA2C,iCAAiC,4CAA4C,yCAAyC;AACroB,sCAAsC,uCAAuC,0BAA0B,YAAY,oBAAoB;AACvI,uCAAuC,uBAAuB,EAAE;AAChE,YAAY;AACZ,aAAa,wDAAwD,8CAA8C,8CAA8C,4CAA4C,kDAAkD,4CAA4C,4CAA4C,8CAA8C;AACrY,cAAc,IAAI;AAClB;AACA;AACA,iCAAiC,kBAAkB;AACnD;AACA,gCAAgC;AAChC,6BAA6B;AAC7B,2CAA2C,mDAAmD,oDAAoD;AAClJ,2BAA2B,iCAAiC;AAC5D;AACA,0BAA0B;AAC1B,uGAAuG,UAAU,2BAA2B;AAC5I,sDAAsD;AACtD;AACA,8CAA8C,oBAAoB,wFAAwF;AAC1J,iBAAiB,0CAA0C;AAC3D;AACA,gCAAgC;AAChC,oEAAoE,uDAAuD;AAC3H,iCAAiC,kBAAkB,mBAAmB,kCAAkC;AACxG,8CAA8C,qBAAqB,eAAe,gCAAgC,+DAA+D,0BAA0B,iBAAiB,0BAA0B,MAAM,4DAA4D,MAAM,oBAAoB,6BAA6B,MAAM,gHAAgH,MAAM;AAC3e,8CAA8C,mBAAmB,qDAAqD,oBAAoB,mDAAmD,mBAAmB,qDAAqD,oBAAoB,qDAAqD,oBAAoB,oCAAoC,wCAAwC;AAC9a;AACA,qCAAqC,6DAA6D,0DAA0D;AAC5J,sCAAsC;AACtC,mBAAmB,uBAAuB,MAAM,iCAAiC,6BAA6B,iCAAiC,gBAAgB,uBAAuB,qBAAqB,YAAY,4BAA4B,kDAAkD,2CAA2C,8BAA8B,6CAA6C,sBAAsB,wCAAwC,mCAAmC,8BAA8B,gCAAgC,iCAAiC,uBAAuB,8BAA8B,wCAAwC,sCAAsC,yCAAyC,4CAA4C,GAAG,wCAAwC,qCAAqC,4BAA4B,mCAAmC,kEAAkE,kEAAkE,kEAAkE,wFAAwF,8FAA8F,sDAAsD,GAAG,uJAAuJ,yGAAyG,wEAAwE,wEAAwE,uCAAuC,mCAAmC,iDAAiD,6CAA6C,0CAA0C,sCAAsC,+LAA+L,iFAAiF,mDAAmD,wDAAwD,8CAA8C,oCAAoC,8CAA8C,sBAAsB,mCAAmC,uCAAuC,8EAA8E,mJAAmJ,EAAE,4DAA4D,4CAA4C,4CAA4C,2IAA2I,8CAA8C,wFAAwF,aAAa,GAAG,aAAa,GAAG,kBAAkB,2BAA2B,iEAAiE,wDAAwD,sDAAsD,uDAAuD,gIAAgI,8EAA8E,wCAAwC,kBAAkB,sGAAsG,wBAAwB,qFAAqF,uBAAuB,8DAA8D,sBAAsB,iHAAiH,uGAAuG,wDAAwD;AAC32I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qIAAqI,sBAAsB,wDAAwD,gBAAgB,GAAG,iBAAiB,OAAO,4BAA4B,0BAA0B,IAAI,6BAA6B,SAAS,YAAY,yBAAyB,IAAI,iCAAiC,SAAS,YAAY,sBAAsB,gFAAgF,kEAAkE,GAAG,gBAAgB,qGAAqG,sBAAsB,wDAAwD,gBAAgB,GAAG,iBAAiB,OAAO,4BAA4B,0BAA0B,IAAI,6BAA6B,SAAS,YAAY,yBAAyB,IAAI,iCAAiC,SAAS,YAAY,sBAAsB,gFAAgF,kEAAkE,IAAI,uFAAuF,OAAO,6BAA6B,qBAAqB,aAAa,gBAAgB,SAAS,UAAU,8CAA8C,4DAA4D,aAAa,IAAI,iBAAiB,mBAAmB,sBAAsB,kBAAkB,4DAA4D,+BAA+B,IAAI,8HAA8H,8BAA8B,cAAc,mBAAmB,MAAM,iBAAiB,QAAQ,wBAAwB,iBAAiB,QAAQ,OAAO,SAAS,sBAAsB,aAAa,SAAS,4EAA4E,IAAI,UAAU,4CAA4C,cAAc,OAAO,4BAA4B,aAAa,KAAK,OAAO,oBAAoB,aAAa,eAAe,OAAO,oBAAoB,aAAa,UAAU,yBAAyB,SAAS,SAAS,KAAK,QAAQ,QAAQ,uBAAuB,QAAQ,uCAAuC,6CAA6C,WAAW,EAAE,wCAAwC;AAC1gF;AACA;AACA;AACA;AACA,6CAA6C,2CAA2C;AACxF;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD,oBAAoB,aAAa;AACjC,uEAAuE,wDAAwD;AAC/H,4DAA4D,cAAc;AAC1E;AACA,qDAAqD,iBAAiB,0CAA0C,eAAe,MAAM,cAAc,YAAY,QAAQ;AACvK,eAAe;AACf;AACA;AACA;AACA;AACA,wCAAwC,iBAAiB,eAAe,SAAS,mCAAmC,cAAc,EAAE,WAAW,2CAA2C,QAAQ,2DAA2D,QAAQ,oHAAoH,KAAK,4CAA4C;AAC1a;AACA;AACA;AACA;AACA;AACA,mDAAmD,kDAAkD,qCAAqC,WAAW;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,sCAAsC,+CAA+C,4BAA4B,kBAAkB,QAAQ;AAChN;AACA,2CAA2C,8EAA8E,+BAA+B,4BAA4B,0BAA0B,GAAG,EAAE;AACnN,wBAAwB,+CAA+C,4BAA4B,+BAA+B,6BAA6B,EAAE;AACjK,+CAA+C,4BAA4B,iCAAiC,0BAA0B,EAAE,iCAAiC,sBAAsB;AAC/L;AACA;AACA;AACA;AACA,4DAA4D,iDAAiD,2BAA2B,qBAAqB,qCAAqC,IAAI;AACtM;AACA;AACA;AACA;AACA,2CAA2C,wBAAwB,gCAAgC,KAAK;AACxG;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,+BAA+B,+CAA+C,OAAO,OAAO,cAAc,YAAY;AAClM;AACA;AACA;AACA;AACA;AACA,wDAAwD,QAAQ,+EAA+E,IAAI,2EAA2E,gDAAgD,+CAA+C,gBAAgB,iEAAiE,EAAE,wDAAwD,sEAAsE,uGAAuG,EAAE,wCAAwC,mHAAmH,oCAAoC,gBAAgB,EAAE,sDAAsD,8DAA8D,EAAE,0DAA0D,sEAAsE,EAAE,yDAAyD,oEAAoE,EAAE,uDAAuD,gEAAgE,EAAE,mDAAmD,6DAA6D,EAAE,kDAAkD,gGAAgG,EAAE,mCAAmC,sDAAsD,iBAAiB,gDAAgD,6CAA6C,8CAA8C,EAAE,+CAA+C,sDAAsD,iBAAiB,gDAAgD,6CAA6C,mDAAmD,+CAA+C,+FAA+F,EAAE,gDAAgD,gGAAgG,EAAE,qDAAqD,sBAAsB,+HAA+H,EAAE,uBAAuB,EAAE,sDAAsD,sDAAsD,iBAAiB,gDAAgD,wBAAwB,kDAAkD,2CAA2C,YAAY,kFAAkF,8CAA8C,EAAE,sCAAsC,sDAAsD,iBAAiB,gDAAgD,uBAAuB,uCAAuC,kHAAkH,+BAA+B,SAAS,WAAW,8CAA8C,EAAE,yCAAyC,sDAAsD,iBAAiB,gDAAgD,6BAA6B,8FAA8F,8CAA8C,EAAE,wDAAwD,sDAAsD,iBAAiB,gDAAgD,SAAS,mBAAmB,yDAAyD;AACj/H,mBAAmB,8DAA8D;AACjF,mBAAmB,+CAA+C,iFAAiF,kEAAkE,+CAA+C,kCAAkC,kBAAkB,oBAAoB,eAAe,iEAAiE,+CAA+C,0BAA0B,QAAQ,WAAW,MAAM,EAAE,0FAA0F,sDAAsD,iBAAiB,gDAAgD,eAAe,mBAAmB,wHAAwH,+DAA+D,OAAO,4DAA4D,mCAAmC,0CAA0C,+BAA+B,qCAAqC,qBAAqB,2DAA2D,6BAA6B,+DAA+D,EAAE,0DAA0D,qBAAqB,8DAA8D,EAAE,kCAAkC,wFAAwF,sBAAsB,oDAAoD,kEAAkE,4TAA4T,gUAAgU,qFAAqF,+DAA+D,GAAG,0CAA0C,sDAAsD,mBAAmB,+BAA+B,oBAAoB,MAAM,yBAAyB,4BAA4B,6BAA6B,qCAAqC;AACvvF,mEAAmE,qDAAqD,wDAAwD,EAAE,wCAAwC,gDAAgD,uBAAuB,kBAAkB,kBAAkB,eAAe,iEAAiE,gDAAgD,0BAA0B,kBAAkB,WAAW,MAAM,EAAE,gEAAgE,wFAAwF,uBAAuB,uFAAuF,wFAAwF,sGAAsG,eAAe,eAAe,4EAA4E,OAAO,OAAO,cAAc,IAAI,sEAAsE,mEAAmE,8FAA8F,uBAAuB,0FAA0F,2FAA2F,yGAAyG,eAAe,eAAe,+EAA+E,OAAO,OAAO,cAAc,IAAI,yEAAyE,6CAA6C,iDAAiD,qCAAqC,yDAAyD;AAChgE,uBAAuB,gCAAgC,gCAAgC,EAAE,mDAAmD,0BAA0B,yBAAyB;AAC/L,0CAA0C,oHAAoH,UAAU,OAAO,OAAO,YAAY,GAAG,IAAI,GAAG,IAAI,2CAA2C,iCAAiC,+BAA+B,QAAQ,kBAAkB,eAAe,iDAAiD,iDAAiD,qCAAqC,uCAAuC,GAAG,IAAI,QAAQ,qCAAqC,sCAAsC,iBAAiB,kCAAkC,EAAE,cAAc,wBAAwB,eAAe,gBAAgB,cAAc,WAAW,qCAAqC,qCAAqC,QAAQ,iCAAiC,0BAA0B,yBAAyB,sCAAsC,kBAAkB,6CAA6C,4BAA4B,qCAAqC,qDAAqD,YAAY,oEAAoE,uBAAuB,2CAA2C,4FAA4F,uCAAuC,kBAAkB,QAAQ,gBAAgB,yBAAyB,wCAAwC,kBAAkB,+CAA+C,8BAA8B,oCAAoC,YAAY,uDAAuD,yEAAyE,WAAW,qCAAqC,gIAAgI,QAAQ,2BAA2B,6BAA6B,yBAAyB,uBAAuB,yCAAyC,eAAe,iCAAiC,qBAAqB,qBAAqB,8CAA8C,yBAAyB,sCAAsC,kBAAkB,6CAA6C,yBAAyB,uCAAuC,wBAAwB,oCAAoC,gCAAgC,gCAAgC,4BAA4B,sBAAsB,uDAAuD,mCAAmC,gJAAgJ,YAAY,WAAW,0NAA0N,iBAAiB,qCAAqC,iBAAiB,qCAAqC,6BAA6B,2CAA2C,aAAa,uBAAuB,2CAA2C,8TAA8T,sCAAsC,qCAAqC,QAAQ,qBAAqB,uBAAuB,oBAAoB,yBAAyB,uCAAuC,kBAAkB,8CAA8C,sBAAsB,uBAAuB,qBAAqB,sDAAsD,YAAY,qFAAqF,uHAAuH,mCAAmC,oBAAoB,QAAQ,oBAAoB,yBAAyB,oCAAoC,kBAAkB,2CAA2C,gCAAgC,kCAAkC,YAAY,oDAAoD,iEAAiE,qCAAqC,uBAAuB,QAAQ,0BAA0B,yBAAyB,sCAAsC,kBAAkB,6CAA6C,wBAAwB,uCAAuC,YAAY,qCAAqC,gEAAgE,WAAW,kCAAkC,kDAAkD,QAAQ,WAAW,aAAa,yBAAyB,8CAA8C,yBAAyB,mCAAmC,kBAAkB,0CAA0C,8BAA8B,wBAAwB,kBAAkB,kCAAkC,+DAA+D,YAAY,WAAW,iCAAiC,mBAAmB,iCAAiC,0BAA0B,6BAA6B,2CAA2C,aAAa,oBAAoB,oEAAoE,6JAA6J,uCAAuC,yBAAyB,QAAQ,8BAA8B,yBAAyB,wCAAwC,kBAAkB,+CAA+C,0BAA0B,2CAA2C,YAAY,mDAAmD,wEAAwE,uCAAuC,oDAAoD,sBAAsB,wCAAwC,kCAAkC,gBAAgB,mBAAmB,mBAAmB,qCAAqC,oDAAoD,oEAAoE,sCAAsC,EAAE,gBAAgB,gCAAgC,gCAAgC,QAAQ,6BAA6B,oBAAoB,yBAAyB,iCAAiC,kBAAkB,wCAAwC,uCAAuC,qBAAqB,8DAA8D,YAAY,uDAAuD,qCAAqC,wDAAwD,uBAAuB,SAAS,GAAG,kEAAkE,8EAA8E,sCAAsC,qBAAqB,QAAQ,sBAAsB,yBAAyB,uCAAuC,kBAAkB,8CAA8C,iCAAiC,sCAAsC,YAAY,yDAAyD,wEAAwE,kCAAkC,iBAAiB,QAAQ,cAAc,yBAAyB,mCAAmC,kBAAkB,0CAA0C,kBAAkB,8BAA8B,YAAY,uCAAuC,sEAAsE,oCAAoC,mBAAmB,QAAQ,kBAAkB,yBAAyB,qCAAqC,kBAAkB,4CAA4C,oBAAoB,kCAAkC,YAAY,2CAA2C,0EAA0E,0CAA0C,4BAA4B,QAAQ,oCAAoC,yBAAyB,2CAA2C,kBAAkB,kDAAkD,0CAA0C,iDAAiD,YAAY,2DAA2D,+EAA+E,WAAW,iCAAiC,wCAAwC,QAAQ,eAAe,eAAe,uBAAuB,sBAAsB,yBAAyB,kCAAkC,kBAAkB,yCAAyC,mBAAmB,gCAAgC,uBAAuB,iCAAiC,oDAAoD,YAAY,mHAAmH,mBAAmB,iDAAiD,qIAAqI,+BAA+B,iBAAiB,QAAQ,cAAc,yBAAyB,gCAAgC,kBAAkB,uCAAuC,kBAAkB,2BAA2B,YAAY,mCAAmC,+DAA+D,kCAAkC,uEAAuE,QAAQ,uBAAuB,yBAAyB,mCAAmC,qBAAqB,uBAAuB,oBAAoB,yBAAyB,mCAAmC,kBAAkB,0CAA0C,uBAAuB,wBAAwB,0CAA0C,sBAAsB,uBAAuB,qBAAqB,oFAAoF,YAAY,0KAA0K,6LAA6L,WAAW,+BAA+B,iCAAiC,QAAQ,WAAW,yBAAyB,oBAAoB,yBAAyB,gCAAgC,kBAAkB,uCAAuC,iBAAiB,wBAAwB,qBAAqB,2CAA2C,YAAY,WAAW,yDAAyD,gBAAgB,8BAA8B,aAAa,iBAAiB,2BAA2B,gDAAgD,2IAA2I,mCAAmC,yBAAyB,oCAAoC,kBAAkB,4BAA4B,YAAY,sBAAsB,iCAAiC,kCAAkC,kCAAkC,QAAQ,6BAA6B,wBAAwB,yBAAyB,mCAAmC,kBAAkB,0CAA0C,uCAAuC,uBAAuB,+CAA+C,YAAY,yEAAyE,mFAAmF,SAAS,kCAAkC,+DAA+D,QAAQ,6BAA6B,+BAA+B,yBAAyB,oCAAoC,yBAAyB,mCAAmC,kBAAkB,0CAA0C,uCAAuC,2BAA2B,qCAAqC,6BAA6B,4EAA4E,YAAY,WAAW,mGAAmG,wBAAwB,sCAAsC,aAAa,kBAAkB,wCAAwC,2KAA2K,oCAAoC,kBAAkB,QAAQ,gBAAgB,yBAAyB,qCAAqC,kBAAkB,4CAA4C,gCAAgC,iCAAiC,YAAY,0CAA0C,kEAAkE,8CAA8C,kBAAkB,QAAQ,gBAAgB,yBAAyB,+CAA+C,kBAAkB,sDAAsD,mBAAmB,2CAA2C,YAAY,gCAAgC,kEAAkE,uCAAuC,kBAAkB,QAAQ,gBAAgB,yBAAyB,wCAAwC,kBAAkB,+CAA+C,mBAAmB,oCAAoC,YAAY,gCAAgC,4DAA4D,iCAAiC,mBAAmB,QAAQ,kBAAkB,yBAAyB,kCAAkC,kBAAkB,yCAAyC,oBAAoB,+BAA+B,YAAY,uCAAuC,qDAAqD,uBAAuB,uBAAuB,WAAW,oBAAoB,WAAW,iDAAiD,2BAA2B,cAAc,gBAAgB,gBAAgB,2BAA2B,uCAAuC,gCAAgC,aAAa,2BAA2B,WAAW,2BAA2B,uBAAuB,yCAAyC,uBAAuB,GAAG,yCAAyC,gDAAgD,uBAAuB,WAAW,+CAA+C,+BAA+B,cAAc,6BAA6B,8BAA8B,8BAA8B,6BAA6B,8CAA8C,+CAA+C,EAAE,4CAA4C,EAAE,kBAAkB,WAAW,iFAAiF,KAAK,qCAAqC,mCAAmC,QAAQ,2BAA2B,4BAA4B,yBAAyB,sCAAsC,kBAAkB,6CAA6C,uCAAuC,6BAA6B,0DAA0D,0CAA0C,kBAAkB,8BAA8B,qCAAqC,kBAAkB,uDAAuD,kBAAkB,kBAAkB,4BAA4B,yBAAyB,0BAA0B,MAAM,yBAAyB,0BAA0B,yDAAyD,YAAY,uBAAuB,2BAA2B,gDAAgD,2BAA2B,WAAW,2BAA2B,iDAAiD,aAAa,kIAAkI,gCAAgC,8BAA8B,uFAAuF,sFAAsF,QAAQ,mBAAmB,yBAAyB,mCAAmC,kCAAkC,yBAAyB,iCAAiC,kBAAkB,wCAAwC,kCAAkC,wBAAwB,6BAA6B,4BAA4B,sEAAsE,YAAY,iEAAiE,wBAAwB,sCAAsC,uBAAuB,qCAAqC,aAAa,oJAAoJ,qCAAqC,6BAA6B,QAAQ,yBAAyB,kBAAkB,yBAAyB,sCAAsC,kBAAkB,6CAA6C,wBAAwB,kEAAkE,6CAA6C,YAAY,iFAAiF,qGAAqG,kCAAkC,gCAAgC,QAAQ,yBAAyB,wBAAwB,yBAAyB,mCAAmC,kBAAkB,0CAA0C,qCAAqC,oCAAoC,6CAA6C,YAAY,+DAA+D,0EAA0E,mCAAmC,qBAAqB,QAAQ,sBAAsB,yBAAyB,oCAAoC,kBAAkB,2CAA2C,mCAAmC,mCAAmC,YAAY,mCAAmC,wDAAwD,mCAAmC,mBAAmB,QAAQ,kBAAkB,yBAAyB,2CAA2C,oBAAoB,iCAAiC,YAAY,+BAA+B,uDAAuD,gBAAgB,cAAc,oBAAoB,cAAc,mCAAmC,gBAAgB,aAAa,iCAAiC,cAAc,aAAa,qCAAqC,kBAAkB,aAAa,oCAAoC,2BAA2B,aAAa,cAAc,UAAU,aAAa,eAAe,wBAAwB,aAAa,sBAAsB,iBAAiB,0BAA0B,0DAA0D,eAAe,yBAAyB,gCAAgC,6BAA6B,mBAAmB,eAAe,eAAe,wBAAwB,kBAAkB,uDAAuD,cAAc,sCAAsC,8EAA8E,oCAAoC,oBAAoB,aAAa,8BAA8B,kBAAkB,aAAa,sCAAsC,kCAAkC,aAAa,gCAAgC,sBAAsB,aAAa,qCAAqC,qBAAqB,aAAa,kCAAkC,kBAAkB,aAAa,oCAAoC,+DAA+D,uBAAuB,wDAAwD,aAAa,6BAA6B,UAAU,aAAa,yEAAyE,oBAAoB,6BAA6B,mBAAmB,4BAA4B,sCAAsC,qBAAqB,qDAAqD,eAAe,yCAAyC,aAAa,qCAAqC,iBAAiB,0BAA0B,kBAAkB,+CAA+C,wBAAwB,2DAA2D,+BAA+B,cAAc,cAAc,wBAAwB,aAAa,gCAAgC,8EAA8E,mCAAmC,wBAAwB,aAAa,yCAAyC,wCAAwC,aAAa,2BAA2B,cAAc,kBAAkB,gBAAgB,yBAAyB,iBAAiB,YAAY,cAAc,iCAAiC,4BAA4B,8BAA8B,wCAAwC,aAAa,+BAA+B,uGAAuG,2BAA2B,+BAA+B,sCAAsC,aAAa,iCAAiC,kCAAkC,aAAa,cAAc,UAAU,aAAa,8BAA8B,oFAAoF,2BAA2B,0CAA0C,EAAE,0BAA0B,oDAAoD,eAAe,sDAAsD,uBAAuB,wDAAwD,YAAY,uBAAuB,aAAa,sBAAsB,mBAAmB,cAAc,mBAAmB,qCAAqC,yBAAyB,EAAE,+DAA+D,UAAU,aAAa,+FAA+F,oBAAoB,6BAA6B,mBAAmB,4BAA4B,sCAAsC,qBAAqB,qDAAqD,eAAe,yCAAyC,aAAa,qCAAqC,iBAAiB,iCAAiC,iBAAiB,0BAA0B,iDAAiD,wCAAwC,mBAAmB,4BAA4B,mBAAmB,iDAAiD,2DAA2D,0BAA0B,+BAA+B,+BAA+B,cAAc,cAAc,wBAAwB,aAAa,gCAAgC,8EAA8E,oCAAoC,8BAA8B,aAAa,iCAAiC,8BAA8B,+GAA+G,+BAA+B,aAAa,8BAA8B,qBAAqB,aAAa,kCAAkC,kBAAkB,aAAa,oCAAoC,oBAAoB,aAAa,2FAA2F,4CAA4C,WAAW,iFAAiF,oBAAoB,aAAa,+BAA+B,sBAAsB,aAAa,oCAAoC,2BAA2B,aAAa,2BAA2B,aAAa,iBAAiB,4BAA4B,aAAa,8FAA8F,yCAAyC,oCAAoC,gCAAgC,EAAE,+EAA+E,mBAAmB,IAAI,4BAA4B,MAAM,wBAAwB,aAAa,MAAM,EAAE,8BAA8B,OAAO,WAAW,gBAAgB,+BAA+B,4BAA4B,oEAAoE,cAAc,+CAA+C,2EAA2E,2BAA2B,cAAc,eAAe,oBAAoB,cAAc,kCAAkC,kBAAkB,aAAa,iCAAiC,iBAAiB,aAAa,sCAAsC,sBAAsB,aAAa,6CAA6C,sBAAsB,aAAa,iCAAiC,iBAAiB,aAAa,qCAAqC,qBAAqB,aAAa,oCAAoC,oBAAoB,aAAa,sCAAsC,uBAAuB,aAAa,2BAA2B,aAAa,UAAU,aAAa,iBAAiB,0BAA0B,gBAAgB,yBAAyB,qBAAqB,8BAA8B,qBAAqB,8BAA8B,oBAAoB,6BAA6B,mBAAmB,4BAA4B,gBAAgB,yBAAyB,gBAAgB,4BAA4B,+BAA+B,eAAe,YAAY,cAAc,wCAAwC,eAAe,cAAc,kEAAkE,WAAW,aAAa,sCAAsC,kDAAkD,oEAAoE,gBAAgB,cAAc,wBAAwB,2BAA2B,2CAA2C,qBAAqB,oCAAoC,qBAAqB,wCAAwC,qCAAqC,cAAc,QAAQ,8CAA8C,6CAA6C,iDAAiD,yDAAyD,4CAA4C,kDAAkD,6CAA6C,gDAAgD,6CAA6C,6CAA6C,2CAA2C,gDAAgD,6CAA6C,0CAA0C,+CAA+C,6CAA6C,iDAAiD,kDAAkD,4CAA4C,+CAA+C,qDAAqD,8CAA8C,kDAAkD,8CAA8C,0CAA0C,gDAAgD,gDAAgD,2CAA2C,kDAAkD,2CAA2C,6BAA6B,sBAAsB,+BAA+B,oBAAoB,0BAA0B,kBAAkB,6BAA6B,cAAc,uCAAuC,uCAAuC,gCAAgC,gDAAgD,MAAM,0DAA0D,0BAA0B,qBAAqB,MAAM,uBAAuB,EAAE,YAAY,qCAAqC,aAAa,4DAA4D,kBAAkB,yBAAyB,yCAAyC,2BAA2B,8BAA8B,YAAY,oBAAoB,SAAS,wCAAwC,oBAAoB,EAAE,cAAc,sBAAsB,0FAA0F,sCAAsC,iCAAiC,eAAe,iDAAiD,yEAAyE,kCAAkC,6BAA6B,4DAA4D,GAAG,GAAG,8BAA8B,4CAA4C,oCAAoC,mBAAmB,8BAA8B,0BAA0B,0BAA0B,gBAAgB,EAAE,iBAAiB,uDAAuD,+DAA+D,8GAA8G,gDAAgD,gFAAgF,mBAAmB,kCAAkC,qEAAqE,yBAAyB,aAAa,cAAc,cAAc,GAAG,EAAE,iBAAiB,2EAA2E,mEAAmE,6GAA6G,mCAAmC,4CAA4C,OAAO,6FAA6F,GAAG,4KAA4K,sCAAsC,0FAA0F,WAAW,YAAY,0BAA0B,eAAe,oBAAoB,6BAA6B,mBAAmB,SAAS,cAAc,4BAA4B,YAAY,qBAAqB,4DAA4D,uCAAuC,qCAAqC,oBAAoB,GAAG,iBAAiB,4FAA4F,eAAe,wCAAwC,SAAS,GAAG,mBAAmB,8BAA8B,qDAAqD,0BAA0B,6CAA6C,sBAAsB,0CAA0C,oBAAoB,aAAa,gBAAgB,UAAU,iBAAiB,iCAAiC,kBAAkB,YAAY,WAAW,uBAAuB,mBAAmB,kDAAkD,mBAAmB,EAAE,qBAAqB,iCAAiC,yBAAyB,cAAc,qCAAqC,iBAAiB,gCAAgC,gCAAgC,iBAAiB,gCAAgC,uCAAuC,uBAAuB,qCAAqC,UAAU,qBAAqB,qBAAqB,2BAA2B,yBAAyB,2BAA2B,4BAA4B,wBAAwB,wBAAwB,0BAA0B,0BAA0B,iBAAiB,mCAAmC,+CAA+C,0BAA0B,EAAE,oCAAoC,wBAAwB,6BAA6B,qBAAqB,8BAA8B,0BAA0B,0BAA0B,4BAA4B,wBAAwB,6BAA6B,wBAAwB,0BAA0B,iBAAiB,qCAAqC,+CAA+C,0BAA0B,EAAE,yYAAyY,mCAAmC,4BAA4B,mCAAmC,mBAAmB,wGAAwG,+DAA+D,sCAAsC,2CAA2C,aAAa,EAAE,gCAAgC,KAAK,EAAE,4BAA4B,sBAAsB,kBAAkB,MAAM,oCAAoC,qBAAqB,WAAW,4DAA4D,QAAQ,WAAW,MAAM,iBAAiB,UAAU,sBAAsB,QAAQ,8DAA8D,mBAAmB,IAAI,MAAM,WAAW,qBAAqB,sBAAsB,8DAA8D,IAAI,KAAK,qBAAqB,kEAAkE,mBAAmB,WAAW,iEAAiE,WAAW,IAAI,mBAAmB,IAAI,MAAM,KAAK,UAAU,+BAA+B,iCAAiC,qCAAqC,6BAA6B,IAAI,GAAG,iCAAiC,sBAAsB,iGAAiG,uBAAuB,oyBAAoyB,eAAe,+wBAA+wB,iBAAiB,2DAA2D,UAAU,sOAAsO,cAAc,oGAAoG,sBAAsB,iCAAiC,mCAAmC,UAAU,SAAS,gBAAgB,YAAY,WAAW,KAAK,WAAW,gHAAgH,iBAAiB,cAAc,UAAU,iCAAiC,yFAAyF,2BAA2B,qBAAqB,qCAAqC,SAAS,qCAAqC,uBAAuB,EAAE,oCAAoC,sBAAsB,EAAE,gCAAgC,kBAAkB,EAAE,uCAAuC,yBAAyB,0CAA0C,GAAG,iCAAiC,sBAAsB,iCAAiC,2DAA2D,cAAc,0BAA0B,YAAY,iBAAiB,gBAAgB,4FAA4F,+BAA+B,uBAAuB,kBAAkB,0BAA0B,iBAAiB,oBAAoB,yBAAyB,2BAA2B,WAAW,6BAA6B,2CAA2C,8CAA8C,0DAA0D,kBAAkB,EAAE,yDAAyD,EAAE,0FAA0F,yBAAyB,gFAAgF,8BAA8B,sFAAsF,gCAAgC,kCAAkC,oBAAoB,iEAAiE,sBAAsB,WAAW,wBAAwB,2CAA2C,8CAA8C,0DAA0D,kBAAkB,EAAE,yDAAyD,EAAE,gFAAgF,yBAAyB,wBAAwB,4CAA4C,2BAA2B,6BAA6B,0BAA0B,mFAAmF,+BAA+B,mBAAmB,8BAA8B,4CAA4C,4BAA4B,WAAW,8BAA8B,2CAA2C,8CAA8C,0DAA0D,kBAAkB,EAAE,yDAAyD,EAAE,4FAA4F,wBAAwB,6EAA6E,6BAA6B,oFAAoF,0BAA0B,WAAW,4BAA4B,2CAA2C,8CAA8C,0DAA0D,kBAAkB,EAAE,yDAAyD,EAAE,wFAAwF,oBAAoB,wFAAwF,wBAAwB,0BAA0B,qBAAqB,yBAAyB,eAAe,SAAS,KAAK,sCAAsC,WAAW,oEAAoE,OAAO,oDAAoD,kBAAkB,EAAE,MAAM,2BAA2B,wBAAwB,mCAAmC,wBAAwB,EAAE,MAAM,2BAA2B,yBAAyB,QAAQ,oDAAoD,0BAA0B,EAAE,iDAAiD,2BAA2B,mBAAmB,iGAAiG,wCAAwC,8BAA8B,8CAA8C,mPAAmP,oBAAoB,qDAAqD,0BAA0B,2DAA2D,wBAAwB,yDAAyD,oBAAoB,iFAAiF,oBAAoB,WAAW,6CAA6C,gBAAgB,GAAG,IAAI,GAAG,iCAAiC,sBAAsB,iCAAiC,mCAAmC,WAAW,uCAAuC,kDAAkD,OAAO,iBAAiB,uFAAuF,4BAA4B,EAAE,8CAA8C,OAAO,aAAa,8FAA8F,4BAA4B,EAAE,oDAAoD,OAAO,aAAa,uFAAuF,4BAA4B,EAAE,uDAAuD,OAAO,oCAAoC,uGAAuG,4BAA4B,EAAE,8CAA8C,OAAO,2BAA2B,6FAA6F,4BAA4B,EAAE,kDAAkD,OAAO,kBAAkB,iGAAiG,4BAA4B,EAAE,8CAA8C,OAAO,aAAa,6FAA6F,4BAA4B,EAAE,8CAA8C,OAAO,aAAa,6FAA6F,4BAA4B,EAAE,8CAA8C,OAAO,mBAAmB,8FAA8F,4BAA4B,EAAE,6DAA6D,OAAO,mBAAmB,4FAA4F,4BAA4B,EAAE,kDAAkD,OAAO,sBAAsB,kGAAkG,4BAA4B,EAAE,kDAAkD,OAAO,kBAAkB,kGAAkG,4BAA4B,EAAE,sDAAsD,OAAO,eAAe,sGAAsG,4BAA4B,EAAE,iDAAiD,OAAO,gBAAgB,iGAAiG,4BAA4B,EAAE,+CAA+C,OAAO,cAAc,+FAA+F,4BAA4B,EAAE,iDAAiD,OAAO,gBAAgB,iGAAiG,4BAA4B,EAAE,iDAAiD,OAAO,gBAAgB,iGAAiG,4BAA4B,EAAE,uDAAuD,OAAO,cAAc,uGAAuG,4BAA4B,EAAE,kDAAkD,OAAO,6DAA6D,8GAA8G,4BAA4B,EAAE,qDAAqD,OAAO,yBAAyB,+DAA+D,4BAA4B,EAAE,gDAAgD,OAAO,sBAAsB,yDAAyD,4BAA4B,EAAE,sDAAsD,OAAO,sBAAsB,kEAAkE,4BAA4B,EAAE,gDAAgD,OAAO,eAAe,2DAA2D,4BAA4B,EAAE,kDAAkD,OAAO,iBAAiB,6DAA6D,4BAA4B,EAAE,iDAAiD,OAAO,gBAAgB,mEAAmE,4BAA4B,EAAE,6CAA6C,OAAO,mBAAmB,wDAAwD,4BAA4B,EAAE,gDAAgD,OAAO,iBAAiB,6DAA6D,4BAA4B,EAAE,iDAAiD,OAAO,gBAAgB,4DAA4D,4BAA4B,EAAE,0EAA0E,OAAO,kBAAkB,iGAAiG,4BAA4B,EAAE,uDAAuD,OAAO,qBAAqB,sGAAsG,4BAA4B,EAAE,6CAA6C,OAAO,YAAY,0DAA0D,4BAA4B,EAAE,8CAA8C,OAAO,aAAa,sGAAsG,4BAA4B,EAAE,iDAAiD,OAAO,gBAAgB,iGAAiG,4BAA4B,EAAE,gEAAgE,OAAO,eAAe,kFAAkF,4BAA4B,EAAE,iDAAiD,OAAO,gBAAgB,gEAAgE,4BAA4B,EAAE,oDAAoD,OAAO,YAAY,sEAAsE,4BAA4B,EAAE,iDAAiD,OAAO,gBAAgB,iGAAiG,4BAA4B,EAAE,0DAA0D,OAAO,cAAc,yEAAyE,4BAA4B,EAAE,4CAA4C,OAAO,qBAAqB,2DAA2D,4BAA4B,EAAE,sBAAsB,oDAAoD,aAAa,+BAA+B,OAAO,uBAAuB,gCAAgC,4BAA4B,EAAE,sDAAsD,OAAO,qBAAqB,gCAAgC,4BAA4B,EAAE,2DAA2D,OAAO,cAAc,gCAAgC,4BAA4B,EAAE,2CAA2C,mEAAmE,QAAQ,2EAA2E,EAAE,iCAAiC,sBAAsB,iCAAiC,mCAAmC,UAAU,SAAS,QAAQ,iDAAiD,yDAAyD,QAAQ,gCAAgC,EAAE,sDAAsD,0EAA0E,QAAQ,wCAAwC,EAAE,iDAAiD,uGAAuG,QAAQ,iDAAiD,EAAE,mEAAmE,OAAO,kBAAkB,uDAAuD,4BAA4B,EAAE,kDAAkD,0HAA0H,+BAA+B,gCAAgC,EAAE,2DAA2D,4FAA4F,QAAQ,+BAA+B,EAAE,sBAAsB,oDAAoD,aAAa,+BAA+B,uGAAuG,iCAAiC,gCAAgC,EAAE,uDAAuD,uEAAuE,qBAAqB,sCAAsC,EAAE,0EAA0E,2KAA2K,QAAQ,sCAAsC,EAAE,6CAA6C,wDAAwD,QAAQ,gCAAgC,EAAE,8CAA8C,4DAA4D,QAAQ,iCAAiC,EAAE,6CAA6C,QAAQ,uBAAuB,EAAE,2CAA2C,QAAQ,0BAA0B,EAAE,qDAAqD,oEAAoE,QAAQ,wCAAwC,EAAE,iCAAiC,sBAAsB,iCAAiC,mCAAmC,UAAU,SAAS,QAAQ,iDAAiD,QAAQ,8BAA8B,EAAE,+CAA+C,yDAAyD,6CAA6C,0BAA0B,EAAE,8DAA8D,QAAQ,8CAA8C,EAAE,4CAA4C,QAAQ,2DAA2D,EAAE,kEAAkE,QAAQ,2DAA2D,EAAE,kDAAkD,QAAQ,wEAAwE,EAAE,4CAA4C,QAAQ,+CAA+C,EAAE,qDAAqD,QAAQ,+BAA+B,EAAE,sBAAsB,6DAA6D,cAAc,+BAA+B,kDAAkD,QAAQ,sDAAsD,EAAE,uEAAuE,QAAQ,8CAA8C,EAAE,gDAAgD,QAAQ,+BAA+B,EAAE,sBAAsB,4CAA4C,8BAA8B,QAAQ,mDAAmD,EAAE,sBAAsB,sCAAsC,8BAA8B,QAAQ,+BAA+B,EAAE,sBAAsB,6CAA6C,8BAA8B,QAAQ,kDAAkD,EAAE,sBAAsB,qDAAqD,0CAA0C,8BAA8B,QAAQ,+BAA+B,EAAE,sBAAsB,oCAAoC,8BAA8B,QAAQ,+BAA+B,EAAE,sBAAsB,kCAAkC,8BAA8B,QAAQ,+CAA+C,EAAE,sBAAsB,oCAAoC,8BAA8B,QAAQ,gCAAgC,EAAE,sBAAsB,kCAAkC,8BAA8B,QAAQ,gCAAgC,EAAE,sBAAsB,0CAA0C,8BAA8B,QAAQ,2BAA2B,EAAE,sBAAsB,iCAAiC,8BAA8B,QAAQ,2BAA2B,EAAE,iCAAiC,sBAAsB,iCAAiC,mCAAmC,UAAU,SAAS,QAAQ,sBAAsB,gDAAgD,+BAA+B,8BAA8B,yBAAyB,2DAA2D,QAAQ,wCAAwC,EAAE,gDAAgD,OAAO,0BAA0B,2DAA2D,4BAA4B,EAAE,sBAAsB,0BAA0B,+BAA+B,OAAO,yBAAyB,0DAA0D,4BAA4B,EAAE,sBAAsB,+CAA+C,cAAc,+BAA+B,OAAO,wBAAwB,yDAAyD,4BAA4B,EAAE,+DAA+D,QAAQ,2BAA2B,EAAE,uDAAuD,OAAO,yBAAyB,0DAA0D,4BAA4B,EAAE,kCAAkC,GAAG,GAAG,SAAS,mEAAmE,kBAAkB,uBAAuB,+BAA+B,iCAAiC,qCAAqC,gCAAgC,kCAAkC,GAAG,aAAa,kBAAkB,4BAA4B,sBAAsB,yBAAyB,wBAAwB,GAAG,kBAAkB,2BAA2B,kCAAkC,sBAAsB,6BAA6B,4BAA4B,mCAAmC,0BAA0B,iCAAiC,kBAAkB,6DAA6D,mBAAmB,8DAA8D,gBAAgB,2DAA2D,kBAAkB,6DAA6D,mBAAmB,oDAAoD,eAAe,gDAAgD,iBAAiB,kDAAkD,qCAAqC,8CAA8C,eAAe,mCAAmC,0CAA0C,8CAA8C,8CAA8C,eAAe,oCAAoC,0CAA0C,kCAAkC,8CAA8C,eAAe,mCAAmC,0CAA0C,2CAA2C,8CAA8C,eAAe,oCAAoC,0CAA0C,+BAA+B,8CAA8C,eAAe,mCAAmC,2CAA2C,mEAAmE,sBAAsB,2BAA2B,6CAA6C,qCAAqC,sCAAsC,0CAA0C,GAAG,4BAA4B,2BAA2B,6BAA6B,yBAAyB,8BAA8B,kBAAkB,qCAAqC,sDAAsD,8BAA8B,sBAAsB,QAAQ,wBAAwB,YAAY,kDAAkD,mCAAmC,yCAAyC,0BAA0B,QAAQ,gCAAgC,yBAAyB,0CAA0C,kBAAkB,iDAAiD,mBAAmB,sCAAsC,YAAY,2DAA2D,gEAAgE,mCAAmC,wBAAwB,QAAQ,mBAAmB,cAAc,yBAAyB,oCAAoC,kBAAkB,2CAA2C,qBAAqB,kBAAkB,sCAAsC,YAAY,6CAA6C,aAAa,gCAAgC,cAAc,4GAA4G,uDAAuD,6DAA6D,mEAAmE,0BAA0B,4OAA4O,2EAA2E,+BAA+B,UAAU,uDAAuD,qBAAqB,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,MAAM,6BAA6B,IAAI,aAAa,IAAI,EAAE,EAAE,MAAM,kEAAkE,uDAAuD,iEAAiE,+BAA+B,uGAAuG,yFAAyF,2BAA2B,+BAA+B,6DAA6D,qJAAqJ,+FAA+F,8BAA8B,0OAA0O,oEAAoE,2DAA2D,iDAAiD,iDAAiD,+FAA+F,mDAAmD,iDAAiD,mDAAmD,qCAAqC,GAAG,oDAAoD,gCAAgC,kDAAkD,kDAAkD,uDAAuD,uDAAuD,mEAAmE,kBAAkB,qEAAqE,kBAAkB,qEAAqE,qBAAqB,wEAAwE,qBAAqB,0EAA0E,oDAAoD,oBAAoB,+CAA+C,wHAAwH,6BAA6B,aAAa,cAAc,EAAE,qCAAqC,mDAAmD,GAAG,0DAA0D,uCAAuC,0DAA0D,uEAAuE,qEAAqE,+CAA+C,2EAA2E,kFAAkF,iFAAiF,yEAAyE,iDAAiD,uCAAuC,qFAAqF,qFAAqF,uFAAuF,qBAAqB,0DAA0D,mCAAmC,EAAE,8CAA8C,kCAAkC,IAAI,UAAU,EAAE,kBAAkB,kDAAkD,6DAA6D,0GAA0G,uBAAuB,GAAG,2CAA2C,6FAA6F,+FAA+F,+BAA+B,oBAAoB,IAAI,2DAA2D,kCAAkC,kGAAkG,iBAAiB,4BAA4B,MAAM,2CAA2C,GAAG,GAAG,+BAA+B,+DAA+D,wBAAwB,+CAA+C,sBAAsB,cAAc,kBAAkB,sCAAsC,QAAQ,mBAAmB,gDAAgD,OAAO,gEAAgE,iCAAiC,0BAA0B,OAAO,+EAA+E,+DAA+D,yDAAyD,eAAe,0DAA0D,0CAA0C,OAAO,yGAAyG,GAAG,MAAM,kIAAkI,qCAAqC,mJAAmJ,yBAAyB,qCAAqC,yCAAyC,6BAA6B,mCAAmC,4CAA4C,2BAA2B,kCAAkC,8EAA8E,yCAAyC,gDAAgD,6GAA6G,EAAE,+EAA+E,4DAA4D,2IAA2I,2BAA2B,qBAAqB,qCAAqC,GAAG,EAAE,uHAAuH,mBAAmB,qEAAqE,IAAI,KAAK,OAAO,sCAAsC,GAAG,iIAAiI,2FAA2F,gCAAgC,gHAAgH,2BAA2B,qBAAqB,cAAc,IAAI,MAAM,2CAA2C,iBAAiB,qBAAqB,uBAAuB,oCAAoC,kCAAkC,IAAI,0BAA0B,+BAA+B,kCAAkC,0BAA0B,sFAAsF,6FAA6F,uBAAuB,IAAI,QAAQ,UAAU,YAAY,sFAAsF,6FAA6F,0EAA0E,EAAE,6BAA6B,kGAAkG,mEAAmE,yBAAyB,gCAAgC,wEAAwE,4EAA4E,4BAA4B,iDAAiD,iDAAiD,uCAAuC,yCAAyC,oCAAoC,yEAAyE,cAAc,uCAAuC,yGAAyG,KAAK,yCAAyC,oEAAoE,2GAA2G,qCAAqC,mDAAmD,oDAAoD,GAAG,eAAe,uBAAuB,sCAAsC,yFAAyF,+BAA+B,2CAA2C,uBAAuB,6CAA6C,GAAG,kCAAkC,2BAA2B,4CAA4C,IAAI,cAAc,YAAY,+CAA+C,4GAA4G,6DAA6D,qBAAqB,yCAAyC,8BAA8B,sCAAsC,iDAAiD,0FAA0F,MAAM,iDAAiD,6CAA6C,uCAAuC,gDAAgD,4DAA4D,uBAAuB,0BAA0B,gCAAgC,gCAAgC,6BAA6B;AAC/gzE,2CAA2C,2CAA2C,wCAAwC,iDAAiD;AAC/K;AACA,6BAA6B,mCAAmC,iCAAiC,0GAA0G,4DAA4D,mCAAmC,8BAA8B,uBAAuB,qDAAqD,iIAAiI,4BAA4B,EAAE,+BAA+B,iFAAiF,iCAAiC,qBAAqB,mDAAmD;AAC5wB;AACA,qEAAqE,+CAA+C,6GAA6G,qBAAqB,cAAc,kCAAkC,4EAA4E,2BAA2B,oEAAoE,kCAAkC,kDAAkD,YAAY,YAAY,mBAAmB,KAAK,yBAAyB,2BAA2B,wBAAwB,gEAAgE,8BAA8B;AAC/vB,YAAY,OAAO,4BAA4B,wBAAwB;AACvE;AACA,SAAS;AACT,CAAC;AACD,kEAAkE,eAAe,UAAU;AAC3F,CAAC,yBAAyB,oCAAoC,gCAAgC,mCAAmC,MAAM,uBAAuB,wCAAwC,YAAY,MAAM,KAAK,yCAAyC,cAAc,sDAAsD,MAAM,WAAW,aAAa,0BAA0B,sBAAsB,uBAAuB,0CAA0C,uBAAuB,MAAM;AACtf;AACA,mCAAmC,6EAA6E;AAChH;AACA,uBAAuB,uBAAuB,yBAAyB;AACvE,+BAA+B,uBAAuB,MAAM,iCAAiC;AAC7F,sEAAsE;AACtE,CAAC,iBAAiB,4BAA4B,MAAM,yBAAyB;AAC7E,6BAA6B,6CAA6C,qBAAqB;AAC/F;AACA,2KAA2K,qCAAqC,iBAAiB,YAAY,wBAAwB,0BAA0B,eAAe,yEAAyE,kDAAkD,iEAAiE,iFAAiF,iDAAiD,yBAAyB,gBAAgB,kDAAkD,gBAAgB,+DAA+D,oDAAoD,2CAA2C,WAAW,wEAAwE,sCAAsC,0BAA0B,qBAAqB,gBAAgB,2DAA2D,0BAA0B,8CAA8C,cAAc,yFAAyF,0BAA0B,2DAA2D,cAAc;AAC13C,+EAA+E,4CAA4C,0BAA0B,oBAAoB,kCAAkC,kBAAkB,gCAAgC,8CAA8C,4DAA4D,MAAM,oBAAoB,oFAAoF,kCAAkC,YAAY,oBAAoB,KAAK,KAAK,oDAAoD,kCAAkC,WAAW,QAAQ,0BAA0B,6BAA6B,MAAM,4BAA4B,wCAAwC,kGAAkG,cAAc,qEAAqE,8EAA8E,uBAAuB,oBAAoB,kCAAkC;AAC3lC,sCAAsC,yBAAyB,iCAAiC,qBAAqB,kCAAkC,4DAA4D,0BAA0B,aAAa;AAC1P,yBAAyB,6BAA6B,QAAQ,QAAQ,cAAc,KAAK,YAAY,mCAAmC,8BAA8B,0CAA0C,iCAAiC,oBAAoB,aAAa,uBAAuB,kCAAkC,qCAAqC,+BAA+B;AAC/Y,yBAAyB,KAAK,KAAK,yCAAyC,cAAc,0CAA0C,0BAA0B,gCAAgC,4BAA4B,oCAAoC,+FAA+F,wFAAwF,4DAA4D,sCAAsC,kEAAkE,uCAAuC,oDAAoD,8CAA8C,oCAAoC,MAAM,6CAA6C,uDAAuD,+BAA+B,wBAAwB,uBAAuB,4BAA4B,mCAAmC,UAAU,gCAAgC,2BAA2B,UAAU,0DAA0D,+DAA+D,6BAA6B,sBAAsB,YAAY,IAAI,KAAK,gBAAgB,aAAa,iCAAiC,KAAK,oBAAoB,SAAS,2BAA2B,YAAY,gCAAgC,8BAA8B,YAAY,aAAa,KAAK,gCAAgC,YAAY,8BAA8B,WAAW,OAAO,0BAA0B,4BAA4B,sCAAsC,aAAa,oBAAoB,+CAA+C,+CAA+C,mCAAmC,wDAAwD,UAAU,EAAE,mBAAmB,uDAAuD,UAAU,IAAI,GAAG,gEAAgE,mCAAmC,kEAAkE,uEAAuE,mCAAmC,eAAe,6BAA6B,MAAM,4BAA4B,sDAAsD;AAC53E;AACA,yDAAyD,+BAA+B,YAAY;AACpG;AACA,eAAe,gDAAgD,eAAe,GAAG,MAAM,4GAA4G,4DAA4D,uBAAuB,cAAc,0BAA0B,gBAAgB,sBAAsB,eAAe,eAAe,qBAAqB,GAAG,GAAG,gDAAgD,gEAAgE,qCAAqC,mJAAmJ,yCAAyC,yBAAyB,gCAAgC,yCAAyC,mCAAmC,0FAA0F,+FAA+F,qCAAqC,kBAAkB,6BAA6B,6FAA6F,kGAAkG,gFAAgF,oEAAoE,2GAA2G,mDAAmD,oDAAoD,GAAG,QAAQ,2BAA2B,mBAAmB,cAAc,kBAAkB,uBAAuB,sBAAsB,0BAA0B,wCAAwC,0BAA0B,gCAAgC,uBAAuB,4BAA4B,oBAAoB,QAAQ,sBAAsB,mBAAmB,YAAY,qBAAqB,iBAAiB,wBAAwB,4DAA4D,qDAAqD,gCAAgC,GAAG,0BAA0B,sBAAsB,iBAAiB,uDAAuD,qBAAqB,qCAAqC,oBAAoB,4BAA4B,mBAAmB,6DAA6D,QAAQ,oBAAoB,4FAA4F,OAAO,qBAAqB,0DAA0D,yBAAyB,4EAA4E,+IAA+I,uDAAuD,iDAAiD,mDAAmD,sBAAsB,6BAA6B,kDAAkD,kDAAkD,8CAA8C,mDAAmD,0CAA0C,GAAG,yCAAyC,4BAA4B,QAAQ,wBAAwB,+EAA+E,yDAAyD,wDAAwD,gFAAgF,2FAA2F,gEAAgE,oCAAoC,qCAAqC,2CAA2C,MAAM,4CAA4C,oBAAoB,yCAAyC,wBAAwB,qCAAqC,yBAAyB,wDAAwD,wBAAwB,uBAAuB,sDAAsD,QAAQ,4FAA4F,iEAAiE,SAAS,yBAAyB,aAAa,kCAAkC,mBAAmB,2BAA2B,kBAAkB,2BAA2B,qCAAqC,+BAA+B,iDAAiD,mBAAmB,yBAAyB,gIAAgI,EAAE,6BAA6B,0CAA0C,WAAW,kDAAkD,yCAAyC,uBAAuB,0DAA0D,uCAAuC,iBAAiB,IAAI,kBAAkB,oBAAoB,wBAAwB,iDAAiD,oBAAoB,iCAAiC,yCAAyC,8CAA8C,eAAe,yCAAyC,aAAa,uCAAuC,QAAQ,iCAAiC,iDAAiD,oBAAoB,cAAc,eAAe,yCAAyC,0BAA0B,uCAAuC,iCAAiC,aAAa,oCAAoC,0CAA0C,yCAAyC,+CAA+C,sEAAsE,QAAQ,cAAc,2BAA2B,kBAAkB,0BAA0B,WAAW,kDAAkD,uBAAuB,+CAA+C,kCAAkC,+BAA+B,mBAAmB,wCAAwC,+CAA+C,uCAAuC,sDAAsD,0DAA0D,0DAA0D,4CAA4C,8EAA8E,oDAAoD,sFAAsF,sCAAsC,yBAAyB,EAAE,iBAAiB,GAAG,wCAAwC,oDAAoD,+BAA+B,GAAG,yCAAyC,sDAAsD,iBAAiB,oCAAoC,iBAAiB,qBAAqB,+BAA+B,gBAAgB,+BAA+B,+BAA+B,kEAAkE,qEAAqE,8IAA8I,gJAAgJ,oBAAoB,8BAA8B,gCAAgC,kEAAkE,yCAAyC,2CAA2C,2CAA2C,uDAAuD,iCAAiC,0CAA0C,oCAAoC,wEAAwE,+BAA+B,YAAY,YAAY,6CAA6C,oGAAoG,6DAA6D,mBAAmB,qCAAqC,0BAA0B,sCAAsC,+CAA+C,0FAA0F,MAAM,+CAA+C,6CAA6C,qCAAqC,gDAAgD,0DAA0D,uBAAuB,0BAA0B,gCAAgC,8BAA8B,2BAA2B;AAC5zS,2CAA2C,2CAA2C,wCAAwC,iDAAiD;AAC/K;AACA,2BAA2B,iCAAiC,iCAAiC,0GAA0G,4DAA4D,mCAAmC,4BAA4B,uBAAuB,mDAAmD,iIAAiI,0BAA0B,EAAE,+BAA+B,iFAAiF,iCAAiC,qBAAqB,mDAAmD;AAClwB;AACA,qEAAqE,6CAA6C,6GAA6G,qBAAqB,cAAc,gCAAgC,4EAA4E,2BAA2B,oEAAoE,gCAAgC,kDAAkD,YAAY,YAAY,mBAAmB,KAAK,yBAAyB,2BAA2B,wBAAwB,gEAAgE,8BAA8B;AACzvB,YAAY,OAAO,4BAA4B,wBAAwB;AACvE;AACA,SAAS;AACT,CAAC;AACD,kEAAkE,eAAe,UAAU;AAC3F,CAAC,yBAAyB,oCAAoC,gCAAgC,iCAAiC,MAAM,uBAAuB,sCAAsC,YAAY,MAAM,KAAK,uCAAuC,cAAc,oDAAoD,MAAM,WAAW,aAAa,wBAAwB,sBAAsB,uBAAuB,0CAA0C,uBAAuB,MAAM;AAC5e;AACA,mCAAmC,6EAA6E;AAChH;AACA,uBAAuB,uBAAuB,yBAAyB;AACvE,+BAA+B,uBAAuB,MAAM,iCAAiC;AAC7F,sEAAsE;AACtE,CAAC,iBAAiB,4BAA4B,MAAM,yBAAyB;AAC7E,2BAA2B,6CAA6C,qBAAqB;AAC7F;AACA,2KAA2K,qCAAqC,iBAAiB,YAAY,wBAAwB,wBAAwB,eAAe,yEAAyE,gDAAgD,iEAAiE,iFAAiF,+CAA+C,uBAAuB,gBAAgB,kDAAkD,gBAAgB,+DAA+D,oDAAoD,yCAAyC,WAAW,wEAAwE,oCAAoC,0BAA0B,qBAAqB,gBAAgB,2DAA2D,wBAAwB,4CAA4C,cAAc,yFAAyF,wBAAwB,yDAAyD,cAAc;AACt2C,+EAA+E,4CAA4C,wBAAwB,oBAAoB,kCAAkC,kBAAkB,gCAAgC,8CAA8C,4DAA4D,MAAM,oBAAoB,oFAAoF,kCAAkC,YAAY,oBAAoB,KAAK,KAAK,oDAAoD,kCAAkC,WAAW,QAAQ,0BAA0B,6BAA6B,MAAM,0BAA0B,wCAAwC,kGAAkG,cAAc,qEAAqE,8EAA8E,uBAAuB,oBAAoB,kCAAkC;AACvlC,sCAAsC,yBAAyB,iCAAiC,qBAAqB,kCAAkC,4DAA4D,0BAA0B,aAAa;AAC1P,yBAAyB,6BAA6B,QAAQ,QAAQ,cAAc,KAAK,YAAY,mCAAmC,8BAA8B,0CAA0C,iCAAiC,oBAAoB,aAAa,uBAAuB,kCAAkC,qCAAqC,+BAA+B;AAC/Y,yBAAyB,KAAK,KAAK,yCAAyC,cAAc,wCAAwC,0BAA0B,gCAAgC,4BAA4B,oCAAoC,+FAA+F,oFAAoF,4DAA4D,oCAAoC,kEAAkE,qCAAqC,oDAAoD,8CAA8C,oCAAoC,MAAM,2CAA2C,qDAAqD,6BAA6B,wBAAwB,uBAAuB,4BAA4B,mCAAmC,UAAU,gCAAgC,2BAA2B,UAAU,0DAA0D,6DAA6D,2BAA2B,sBAAsB,YAAY,IAAI,KAAK,gBAAgB,aAAa,+BAA+B,KAAK,oBAAoB,SAAS,2BAA2B,YAAY,8BAA8B,8BAA8B,YAAY,aAAa,KAAK,gCAAgC,YAAY,8BAA8B,WAAW,OAAO,0BAA0B,4BAA4B,sCAAsC,aAAa,oBAAoB,+CAA+C,+CAA+C,mCAAmC,sDAAsD,UAAU,EAAE,mBAAmB,qDAAqD,UAAU,IAAI,GAAG,8DAA8D,mCAAmC,gEAAgE,qEAAqE,mCAAmC,eAAe,6BAA6B,MAAM,4BAA4B,sDAAsD;AAC11E;AACA,yDAAyD,+BAA+B,YAAY;AACpG;AACA,eAAe,gDAAgD,eAAe,GAAG,MAAM,4GAA4G,wDAAwD,iBAAiB,cAAc,iCAAiC,YAAY,kCAAkC,cAAc,oCAAoC,aAAa,mCAAmC,OAAO,6DAA6D,YAAY,SAAS,8BAA8B,qCAAqC;AACvmB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,WAAW,MAAM;AACjB;AACA,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB,6DAA6D,YAAY,SAAS,8BAA8B,wBAAwB,sCAAsC,mGAAmG,mEAAmE,oFAAoF,sBAAsB,kBAAkB,qBAAqB,oBAAoB,yEAAyE,YAAY,SAAS,gCAAgC,iCAAiC,WAAW,sBAAsB,uBAAuB,yBAAyB,qBAAqB,qBAAqB,2BAA2B,MAAM,iBAAiB,gCAAgC;AACr5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,8BAA8B,oBAAoB;AAClD,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,2BAA2B,kBAAkB,kBAAkB,6DAA6D,YAAY,SAAS,8BAA8B,wBAAwB,kCAAkC,0CAA0C,6CAA6C,WAAW,IAAI,8BAA8B,SAAS,oBAAoB;AAC1Y,4CAA4C,uCAAuC,MAAM,wBAAwB,GAAG,yCAAyC,4BAA4B,qCAAqC,OAAO,8DAA8D,GAAG,8CAA8C,IAAI,uBAAuB,WAAW,mBAAmB,SAAS,QAAQ,qBAAqB,iDAAiD,8BAA8B,kDAAkD,8BAA8B,sDAAsD,4BAA4B,sEAAsE,mDAAmD;AAC7xB;AACA,2BAA2B,mFAAmF,gDAAgD,qBAAqB,6DAA6D,YAAY,SAAS,8BAA8B,sCAAsC,iCAAiC,WAAW,OAAO,oBAAoB,4BAA4B,0BAA0B,2EAA2E,YAAY,SAAS,kCAAkC,4CAA4C,0BAA0B,GAAG,kBAAkB,iDAAiD,YAAY,eAAe,cAAc,kCAAkC,qCAAqC,oBAAoB,0BAA0B,iBAAiB,aAAa,GAAG,OAAO,uBAAuB,GAAG,4BAA4B,mFAAmF;AACniC;AACA,iBAAiB,kBAAkB,mBAAmB,oBAAoB,cAAc,QAAQ,gEAAgE,cAAc,UAAU,gCAAgC,yBAAyB,0BAA0B,gBAAgB,2BAA2B,uDAAuD,mCAAmC,SAAS,oBAAoB,uBAAuB,gBAAgB,oBAAoB,SAAS,wCAAwC,SAAS,uBAAuB,yBAAyB,yBAAyB,IAAI,QAAQ,2BAA2B,mCAAmC,kCAAkC,SAAS,qBAAqB,uBAAuB,mBAAmB,sBAAsB,eAAe,cAAc,mBAAmB,SAAS,8BAA8B,sBAAsB,kCAAkC,+BAA+B,2EAA2E,sBAAsB,kBAAkB,6DAA6D,cAAc,QAAQ,gEAAgE,cAAc,UAAU,gCAAgC,2BAA2B;AAC5zC,6DAA6D,eAAe,mBAAmB,mBAAmB,cAAc,UAAU,qBAAqB;AAC/J,yCAAyC;AACzC,cAAc,8BAA8B,IAAI,oBAAoB,OAAO;AAC3E,yBAAyB,eAAe,aAAa,UAAU,eAAe;AAC9E,gBAAgB,QAAQ,UAAU,qCAAqC,MAAM,aAAa,sBAAsB,sCAAsC;AACtJ,WAAW,mBAAmB,+BAA+B,gBAAgB,UAAU,cAAc,QAAQ,yCAAyC,UAAU;AAChK,uBAAuB,aAAa,0BAA0B,mBAAmB,eAAe,UAAU,eAAe,aAAa,wBAAwB,iCAAiC,wBAAwB,aAAa,iEAAiE,SAAS,uBAAuB,0BAA0B,sDAAsD,yBAAyB,8EAA8E,iCAAiC,eAAe,mBAAmB,cAAc,kBAAkB,qCAAqC,mBAAmB,WAAW,QAAQ,UAAU,eAAe,qBAAqB,UAAU,eAAe,6CAA6C,UAAU,uBAAuB,kBAAkB,cAAc,qBAAqB,aAAa,4BAA4B,oBAAoB,gBAAgB,UAAU,eAAe,gBAAgB,QAAQ,WAAW,0DAA0D,eAAe,gBAAgB;AACtlC,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa,SAAS;AACtB,wDAAwD,8DAA8D,4CAA4C;AAClK,iDAAiD,wBAAwB,yBAAyB,OAAO,qBAAqB,eAAe,gBAAgB,qCAAqC,gBAAgB,eAAe,0BAA0B,QAAQ,eAAe,iDAAiD,iBAAiB,KAAK,aAAa,SAAS,yDAAyD;AACxa,+CAA+C,uDAAuD;AACtG,iBAAiB,8BAA8B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gBAAgB;AAChB;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,yEAAyE,gEAAgE,gCAAgC;AACpN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mDAAmD,0BAA0B;AACrH,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa,SAAS;AACtB,iDAAiD,gDAAgD,4CAA4C;AAC7I,uBAAuB,8BAA8B;AACrD;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA,aAAa,SAAS;AACtB,8CAA8C,yDAAyD,sBAAsB;AAC7H;AACA;AACA;AACA,UAAU,cAAc,yBAAyB,eAAe,iBAAiB,sCAAsC,yBAAyB,sCAAsC,yBAAyB,yBAAyB,eAAe,aAAa,QAAQ,iBAAiB,cAAc,aAAa,0BAA0B,kBAAkB,uBAAuB,oCAAoC,uBAAuB,kBAAkB,gBAAgB,2BAA2B,uBAAuB,kBAAkB,oCAAoC,uBAAuB,kBAAkB,gBAAgB,cAAc,+CAA+C,4BAA4B,WAAW,8CAA8C,4BAA4B,QAAQ,8CAA8C,MAAM,8CAA8C,UAAU,kBAAkB,qBAAqB,kBAAkB,WAAW,eAAe,eAAe,eAAe,mBAAmB,YAAY,IAAI,KAAK,MAAM,iBAAiB,uBAAuB,WAAW,cAAc,8BAA8B,aAAa,wBAAwB,2CAA2C,sBAAsB,eAAe,yBAAyB,sDAAsD,8BAA8B,iBAAiB,mBAAmB,YAAY,wDAAwD,2BAA2B,6BAA6B,6BAA6B,+CAA+C,2BAA2B,wBAAwB,qCAAqC,4BAA4B,gEAAgE,oCAAoC,sDAAsD,wBAAwB,6EAA6E,cAAc,UAAU,kCAAkC,kDAAkD,8BAA8B,4DAA4D,iDAAiD,qDAAqD,eAAe,YAAY,8BAA8B;AAC/zE;AACA,2CAA2C,6EAA6E,cAAc,UAAU,kCAAkC,sCAAsC,WAAW,yFAAyF,kBAAkB,wBAAwB,MAAM,qBAAqB,yBAAyB,yBAAyB,oBAAoB,0BAA0B,aAAa,GAAG,6BAA6B,WAAW,OAAO,oBAAoB,YAAY,YAAY,IAAI,0BAA0B,qBAAqB,cAAc,6EAA6E,cAAc,UAAU,kCAAkC,2BAA2B,IAAI,KAAK,kBAAkB,oCAAoC,cAAc,qBAAqB,iBAAiB,6BAA6B,2BAA2B,cAAc,iCAAiC,uCAAuC,wBAAwB,aAAa,kBAAkB,eAAe,2BAA2B,8BAA8B;AAC/qC,qCAAqC,aAAa,cAAc,gCAAgC,aAAa,WAAW,OAAO,oBAAoB,uBAAuB,0BAA0B,eAAe,GAAG,GAAG,UAAU,mBAAmB,uBAAuB,OAAO,gDAAgD,QAAQ,gBAAgB,sBAAsB,mCAAmC,yFAAyF,wBAAwB,4BAA4B,6DAA6D,2CAA2C,0BAA0B,wBAAwB,4BAA4B,4DAA4D,0CAA0C,QAAQ,MAAM,kBAAkB,wBAAwB,wBAAwB,4BAA4B,4DAA4D,0CAA0C,6BAA6B,wBAAwB,4BAA4B,2DAA2D,yCAAyC,gBAAgB,yBAAyB,WAAW;AACzvC;AACA,iBAAiB,QAAQ,kBAAkB,4DAA4D,qBAAqB,sBAAsB,qCAAqC,YAAY,IAAI,KAAK,0BAA0B,iBAAiB,uBAAuB,sBAAsB,cAAc,wBAAwB,kBAAkB,+BAA+B,sBAAsB,kCAAkC,kBAAkB,oBAAoB,UAAU,wBAAwB,WAAW,mBAAmB,eAAe,oBAAoB,QAAQ,uCAAuC,SAAS,eAAe,UAAU,qBAAqB,QAAQ,eAAe,6BAA6B;AACttB,2BAA2B,WAAW,8CAA8C,cAAc,gDAAgD,QAAQ,0CAA0C,QAAQ,0CAA0C,QAAQ,2CAA2C,EAAE,UAAU;AACrT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,GAAG;AACd,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wBAAwB,kCAAkC,0CAA0C,2BAA2B,OAAO,aAAa,GAAG,2BAA2B,mBAAmB;AACpP,uBAAuB,8BAA8B;AACrD;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,WAAW,qCAAqC;AAChD,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA,aAAa,SAAS;AACtB,mDAAmD,6DAA6D,oCAAoC;AACpJ,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA,sDAAsD,kCAAkC,4CAA4C,4BAA4B,0BAA0B,6EAA6E,cAAc,UAAU,kCAAkC,yBAAyB,GAAG,oBAAoB,cAAc,YAAY,oBAAoB,KAAK,kBAAkB,yCAAyC,6BAA6B,GAAG,0CAA0C;AACziB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,uDAAuD,mBAAmB;AACrH,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA,iDAAiD,gDAAgD,yBAAyB,wCAAwC,mCAAmC,qBAAqB,eAAe,kCAAkC,gCAAgC,8BAA8B,yCAAyC,+BAA+B,gBAAgB,iCAAiC,iCAAiC,YAAY,GAAG,OAAO,sBAAsB,iDAAiD,KAAK;AACrkB;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,sCAAsC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,oFAAoF,mBAAmB;AAClJ,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,sDAAsD,8FAA8F,wBAAwB;AAC5K,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,iDAAiD,0FAA0F,yBAAyB;AACpK,wCAAwC,gCAAgC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA,WAAW,eAAe;AAC1B;AACA,WAAW,eAAe;AAC1B;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA,aAAa,SAAS;AACtB,6CAA6C,4BAA4B,4BAA4B,0BAA0B,YAAY,mBAAmB,4BAA4B,sBAAsB,6EAA6E,cAAc,UAAU,kCAAkC,aAAa,sBAAsB,0BAA0B,4BAA4B,sBAAsB,2CAA2C,WAAW,yBAAyB,qBAAqB,iCAAiC,yDAAyD;AACpoB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,mEAAmE,sBAAsB;AACvI,wBAAwB,+BAA+B;AACvD;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa,SAAS;AACtB,sDAAsD,6EAA6E,wCAAwC;AAC3K,wBAAwB,+BAA+B;AACvD;AACA,8BAA8B,8BAA8B;AAC5D;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa,SAAS;AACtB,+CAA+C,8CAA8C,wCAAwC;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B;AACA,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,SAAS;AACT,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB,kBAAkB,gEAAgE,cAAc,UAAU,gCAAgC,wBAAwB,cAAc,qBAAqB,qEAAqE,cAAc,UAAU,qCAAqC,SAAS,4CAA4C,MAAM,yBAAyB,EAAE,oBAAoB,cAAc;AACpf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,8EAA8E,kBAAkB;AAC1I,yBAAyB,gCAAgC;AACzD;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA,aAAa,SAAS;AACtB,qDAAqD,wFAAwF,uBAAuB;AACpK,yBAAyB,gCAAgC;AACzD;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA,aAAa,SAAS;AACtB,gDAAgD,oFAAoF,wBAAwB,mDAAmD,sCAAsC,8BAA8B,qBAAqB,uBAAuB,aAAa,GAAG,OAAO,4BAA4B,eAAe,YAAY,aAAa,KAAK,wCAAwC,wBAAwB,GAAG,sDAAsD,eAAe,+BAA+B,qBAAqB,0BAA0B,MAAM,cAAc,cAAc,GAAG,aAAa,GAAG,OAAO,4BAA4B,qEAAqE,GAAG,gDAAgD,uDAAuD,yDAAyD;AACr7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,UAAU;AACrB;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,iDAAiD,mBAAmB;AAC/G,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa,SAAS;AACtB,sDAAsD,2DAA2D,wBAAwB;AACzI,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,UAAU;AACrB;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa,SAAS;AACtB,iDAAiD,uDAAuD,yBAAyB;AACjI;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B;AACA,WAAW,UAAU;AACrB;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,gCAAgC,2BAA2B,oCAAoC,mBAAmB,wBAAwB,sBAAsB,YAAY,eAAe,oBAAoB;AAC/M,2BAA2B,kCAAkC;AAC7D;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,WAAW,qCAAqC;AAChD,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA,aAAa,SAAS;AACtB,uDAAuD,kCAAkC,4CAA4C,0BAA0B,0BAA0B,mBAAmB,QAAQ,GAAG,GAAG,oBAAoB,cAAc;AAC5P,IAAI,eAAe,kBAAkB,YAAY,oBAAoB,KAAK,kBAAkB,IAAI,IAAI,eAAe,IAAI,IAAI,eAAe,oCAAoC,uBAAuB,MAAM,qBAAqB,6BAA6B,GAAG,yBAAyB;AACzR,6BAA6B,oCAAoC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA,aAAa,SAAS;AACtB,wDAAwD,wBAAwB,cAAc,kCAAkC,+CAA+C,iCAAiC,wBAAwB,mBAAmB,WAAW,GAAG,6BAA6B,2BAA2B,gBAAgB,oBAAoB,yBAAyB,cAAc,KAAK,mCAAmC,qCAAqC,iCAAiC,8BAA8B,+EAA+E,cAAc,UAAU,oCAAoC,oBAAoB,iBAAiB,oBAAoB,aAAa,GAAG,8BAA8B,IAAI;AAC9wB;AACA,aAAa,UAAU;AACvB;AACA,cAAc,UAAU;AACxB;AACA,cAAc,SAAS;AACvB;AACA,cAAc,UAAU;AACxB;AACA,cAAc,UAAU;AACxB;AACA,cAAc,UAAU;AACxB;AACA,cAAc,QAAQ;AACtB;AACA;AACA,cAAc,QAAQ;AACtB;AACA,WAAW,gCAAgC;AAC3C,cAAc,eAAe;AAC7B;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA,cAAc,eAAe;AAC7B;AACA,cAAc,eAAe;AAC7B;AACA,cAAc,UAAU;AACxB;AACA;AACA,mBAAmB,wCAAwC;AAC3D;AACA,eAAe,eAAe,IAAI;AAClC,cAAc,UAAU;AACxB;AACA;AACA;AACA,cAAc,UAAU;AACxB;AACA;AACA;AACA,cAAc,QAAQ;AACtB;AACA,cAAc,UAAU;AACxB;AACA;AACA,cAAc,UAAU;AACxB;AACA;AACA,cAAc,UAAU;AACxB;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA,cAAc,UAAU;AACxB;AACA,cAAc,UAAU;AACxB;AACA,cAAc,UAAU;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA,aAAa,gCAAgC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,WAAW,YAAY;AACvB;AACA,IAAI;AACJ;AACA,WAAW,YAAY;AACvB;AACA;AACA,YAAY,YAAY,EAAE,YAAY,EAAE,YAAY;AACpD;AACA,IAAI;AACJ;AACA;AACA,cAAc,YAAY;AAC1B;AACA,IAAI;AACJ,wCAAwC,8BAA8B,0BAA0B,sBAAsB,iBAAiB;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO,8CAA8C;AAChE;AACA,WAAW,UAAU;AACrB;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,QAAQ;AACR;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,iCAAiC,wBAAwB,gHAAgH,mCAAmC,2BAA2B,IAAI,KAAK,gCAAgC,iBAAiB,+CAA+C,kCAAkC,uCAAuC,yBAAyB,YAAY,GAAG,YAAY;AAC7c,8BAA8B,gCAAgC;AAC9D;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA,WAAW,qCAAqC;AAChD,WAAW,UAAU;AACrB;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,gDAAgD,qBAAqB;AAClH,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA,WAAW,qCAAqC;AAChD,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa,SAAS;AACtB,sDAAsD,0DAA0D,wBAAwB;AACxI,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA,WAAW,qCAAqC;AAChD,WAAW,UAAU;AACrB;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa,SAAS;AACtB,iDAAiD,sDAAsD,yBAAyB;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yEAAyE,iBAAiB;AACnI,wBAAwB,+BAA+B;AACvD;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA,aAAa,SAAS;AACtB,oDAAoD,mFAAmF,sBAAsB;AAC7J,wBAAwB,+BAA+B;AACvD;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA,aAAa,SAAS;AACtB,+CAA+C,+EAA+E,uBAAuB;AACrJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qCAAqC;AAChD,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,IAAI;AACJ;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,IAAI;AACJ;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,kCAAkC,+BAA+B,6BAA6B,0BAA0B,YAAY,iBAAiB,GAAG,GAAG,iBAAiB,4BAA4B,yDAAyD,EAAE,gCAAgC,qCAAqC,wBAAwB,mBAAmB;AAC9Z;AACA;AACA;AACA;AACA;AACA;AAC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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,SAAS;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA,yFAAyF;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iFAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8DAA8D;AAC/D;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B,6CAA6C,gCAAgC,oCAAoC,oDAAoD,6DAA6D,iEAAiE,sCAAsC;AACzU,mCAAmC,gBAAgB,sBAAsB,OAAO,uDAAuD,+DAA+D,iFAAe,6BAA6B,sKAAsK,mFAAmF,KAAK;AAChf;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB;AACA;AACA,4CAA4C;AAC5C,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mFAAiB;AAC5B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,6BAA6B;AAC5E;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,QAAQ;AACR;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,QAAQ;AACR;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG,IAAI;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;;AAEA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO,OAAO,OAAO;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,OAAO;AACtB;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,eAAe,OAAO;AACtB,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,OAAO;AACb;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,OAAO;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,KAAK;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG,aAAa;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gCAAgC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,aAAa;;AAEb;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB;AACtB,6BAA6B;AAC7B;AACA;AACA;AACA,2DAA2D;AAC3D,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP,mDAAmD;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,mBAAmB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA,wCAAwC,mBAAmB;AAC3D;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4HAA4H,cAAc;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,OAAO;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA,CAAC,wCAAwC;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,0BAA0B;AAC5C;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,UAAU;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sEAAsE,iBAAiB;AACvF;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sEAAsE,iBAAiB;AACvF;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,UAAU;AAC3E;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,iBAAiB;AACrF;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,yEAAyE,UAAU;AACnF;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,GAAG;AACH;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;AAER;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,CAAC,IAAI;;AAEL,QAAQ;AACR;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,sGAAsG;;AAEtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,uCAAuC;AACvC;AACA,OAAO;AACP,MAAM;AACN;AACA,+CAA+C;AAC/C;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG;;AAEpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,mDAAmD;AACnD;AACA;AACA,+BAA+B,uBAAuB;AACtD;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kJAAkJ;;AAElJ;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,yBAAyB;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,yBAAyB;AAC7H,uCAAuC;;AAEvC;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA,WAAW;AACX;AACA,QAAQ;AACR;AACA;AACA,oFAAoF,UAAU;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,kBAAkB;AAClB;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,oGAAoG,yBAAyB;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,yBAAyB;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,gBAAgB;AAChB;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,IAAI;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2FAA2F;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,oBAAoB;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,2BAA2B;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA,WAAW;AACX;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6DAA6D,UAAU;AACvE;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;;AAEtB,uCAAuC;;AAEvC,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA,KAAK,GAAG;;AAER;AACA;AACA,MAAM;;AAEN;AACA;AACA,qEAAqE,UAAU;AAC/E;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,8DAA8D,UAAU;AACxE;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,qEAAqE,UAAU;AAC/E;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,oEAAoE,UAAU;AAC9E;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,8DAA8D,UAAU;AACxE;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,kEAAkE,UAAU;AAC5E,iCAAiC;;AAEjC;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,qEAAqE,UAAU;AAC/E;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,kEAAkE,UAAU;AAC5E;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,UAAU;AAC5F;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;;AAEtB;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,wBAAwB;AACxB;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP,uCAAuC;AACvC;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,uKAAuK,oBAAoB;AAC3L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,4EAA4E,kBAAkB;AAC9F;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,UAAU;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,OAAO;AACtC,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN,yDAAyD;AACzD;AACA,OAAO;AACP,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE;AACA;AACA,KAAK;AACL,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;AAER;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA,QAAQ;;AAER;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,cAAc;AACd,gBAAgB;AAChB,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA,OAAO;AACP,iDAAiD;AACjD;AACA,KAAK,kBAAkB;;AAEvB;AACA;AACA;AACA;AACA;AACA,2EAA2E,UAAU;AACrF;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA,KAAK;AACL,wCAAwC;;AAExC;AACA;AACA,KAAK,GAAG;;AAER;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA,oDAAoD;AACpD;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA,yDAAyD;AACzD;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,oCAAoC;AACpC,gCAAgC;AAChC,kCAAkC;AAClC,gCAAgC;AAChC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAI;AACX,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;;AAE9D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA;AACA,+BAA+B;AAC/B;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,UAAU;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,UAAU;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0G,0BAA0B;AACpI;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,0FAA0F,sBAAsB;AAChH;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA,8EAA8E,mBAAmB;AACjG;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK,2BAA2B,6BAA6B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+FAA+F;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,oEAAoE;;AAEpE;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA,KAAK,IAAI;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0GAA0G;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA,2FAA2F;AAC3F,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;AAER;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,UAAU;AACjF;AACA;AACA;AACA;AACA,sFAAsF,UAAU;AAChG;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,MAAM,UAAU,8EAA8E,aAAa;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,0HAA0H,8BAA8B;AACxJ;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,6CAA6C,gCAAgC,oCAAoC,oDAAoD,6DAA6D,iEAAiE,sCAAsC;AACzU,mCAAmC,gBAAgB,sBAAsB,OAAO,uDAAuD,+DAA+D,iFAAe,6BAA6B,sKAAsK,mFAAmF,KAAK;AAChf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,mBAAmB;AACnB,kBAAkB;AAClB;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,qFAAqF,cAAc;AACnG;AACA,SAAS;AACT,oFAAoF,cAAc;AAClG;AACA,SAAS;AACT,yEAAyE,cAAc;AACvF;AACA,SAAS;AACT,gFAAgF,cAAc;AAC9F;AACA,SAAS;AACT,kFAAkF,cAAc;AAChG;AACA,SAAS;AACT,+EAA+E,cAAc;AAC7F;AACA,SAAS;AACT,iFAAiF,cAAc;AAC/F;AACA,SAAS;AACT,mFAAmF,cAAc;AACjG;AACA,SAAS;AACT;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,mDAAmD,cAAc;AACjE;AACA,WAAW;AACX,SAAS;AACT,kFAAkF,cAAc;AAChG;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6CAA6C,gCAAgC,oCAAoC,oDAAoD,6DAA6D,iEAAiE,sCAAsC;AACzU,mCAAmC,gBAAgB,sBAAsB,OAAO,uDAAuD,+DAA+D,iFAAe,6BAA6B,sKAAsK,mFAAmF,KAAK;AAChf;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,aAAa;AAC5F;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mFAAiB;AAC5B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uCAAuC;AAC1F;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6CAA6C,gCAAgC,oCAAoC,oDAAoD,6DAA6D,iEAAiE,sCAAsC;AACzU,mCAAmC,gBAAgB,sBAAsB,OAAO,uDAAuD,+DAA+D,iFAAe,6BAA6B,sKAAsK,mFAAmF,KAAK;AAChf;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F,4BAA4B;AACxH;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mFAAiB;AAC5B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,KAAK;AACL;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA,WAAW,mFAAiB;AAC5B;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,YAAY;AACZ;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA,aAAa,OAAO;AACpB,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA,OAAO;AACP;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,eAAe;AACf;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,iBAAiB;AACjB,0DAA0D,OAAO;AACjE;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,aAAa;AACb;AACA;AACA;AACA,0BAA0B,cAAc;AACxC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA,aAAa;AACb,mGAAmG,OAAO;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb,WAAW;AACX;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,0BAA0B,cAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,aAAa;AACb;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,aAAa;AACb;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,aAAa;AACb;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,aAAa;AACb;AACA,WAAW;AACX;AACA,WAAW;AACX,sCAAsC;AACtC,WAAW;AACX;AACA,oBAAoB;AACpB;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;AACrC;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA,CAAC,wBAAwB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,iBAAiB;AACjB;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0DAA0D;AAC3D;AACA;AACA;AACA,CAAC,4DAA4D;;AAE7D,2CAA2C,gCAAgC,oCAAoC,oDAAoD,6DAA6D,iEAAiE,sCAAsC;AACvU,iCAAiC,gBAAgB,sBAAsB,OAAO,uDAAuD,6DAA6D,iFAAe,6BAA6B,oKAAoK,mFAAmF,KAAK;AAC1e;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,IAAI,iFAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI,iFAAe;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,4CAA4C;AAC5C,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB,IAAI,iFAAe;AACnB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEmiC","sources":["webpack://@agentx/agentx/../../node_modules/@webex/internal-media-core/dist/esm/index.js"],"sourcesContent":["import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';\nimport _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet';\nimport _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet';\n\nfunction _mergeNamespaces(n, m) {\n m.forEach(function (e) {\n e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) {\n if (k !== 'default' && !(k in n)) {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n });\n return Object.freeze(n);\n}\n\nvar domain;\n\n// This constructor is used to store event handlers. Instantiating this is\n// faster than explicitly calling `Object.create(null)` to get a \"clean\" empty\n// object (tested with v8 v4.9).\nfunction EventHandlers() {}\nEventHandlers.prototype = Object.create(null);\n\nfunction EventEmitter$6() {\n EventEmitter$6.init.call(this);\n}\n\n// nodejs oddity\n// require('events') === require('events').EventEmitter\nEventEmitter$6.EventEmitter = EventEmitter$6;\n\nEventEmitter$6.usingDomains = false;\n\nEventEmitter$6.prototype.domain = undefined;\nEventEmitter$6.prototype._events = undefined;\nEventEmitter$6.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter$6.defaultMaxListeners = 10;\n\nEventEmitter$6.init = function() {\n this.domain = null;\n if (EventEmitter$6.usingDomains) {\n // if there is an active domain, then attach to it.\n if (domain.active ) ;\n }\n\n if (!this._events || this._events === Object.getPrototypeOf(this)._events) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter$6.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter$6.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter$6.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone$3(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone$3(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone$3(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone$3(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone$3(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter$6.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events, domain;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n domain = this.domain;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n er = arguments[1];\n if (domain) {\n if (!er)\n er = new Error('Uncaught, unspecified \"error\" event');\n er.domainEmitter = this;\n er.domain = domain;\n er.domainThrown = false;\n domain.emit('error', er);\n } else if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n return true;\n};\n\nfunction _addListener$3(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = new EventHandlers();\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (!existing) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] :\n [existing, listener];\n } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + type + ' listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n emitWarning(w);\n }\n }\n }\n\n return target;\n}\nfunction emitWarning(e) {\n typeof console.warn === 'function' ? console.warn(e) : console.log(e);\n}\nEventEmitter$6.prototype.addListener = function addListener(type, listener) {\n return _addListener$3(this, type, listener, false);\n};\n\nEventEmitter$6.prototype.on = EventEmitter$6.prototype.addListener;\n\nEventEmitter$6.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener$3(this, type, listener, true);\n };\n\nfunction _onceWrap$3(target, type, listener) {\n var fired = false;\n function g() {\n target.removeListener(type, g);\n if (!fired) {\n fired = true;\n listener.apply(target, arguments);\n }\n }\n g.listener = listener;\n return g;\n}\n\nEventEmitter$6.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap$3(this, type, listener));\n return this;\n};\n\nEventEmitter$6.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap$3(this, type, listener));\n return this;\n };\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter$6.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || (list.listener && list.listener === listener)) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list[0] = undefined;\n if (--this._eventsCount === 0) {\n this._events = new EventHandlers();\n return this;\n } else {\n delete events[type];\n }\n } else {\n spliceOne$3(list, position);\n }\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n \n// Alias for removeListener added in NodeJS 10.0\n// https://nodejs.org/api/events.html#events_emitter_off_eventname_listener\nEventEmitter$6.prototype.off = function(type, listener){\n return this.removeListener(type, listener);\n};\n\nEventEmitter$6.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n for (var i = 0, key; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = new EventHandlers();\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n do {\n this.removeListener(type, listeners[listeners.length - 1]);\n } while (listeners[0]);\n }\n\n return this;\n };\n\nEventEmitter$6.prototype.listeners = function listeners(type) {\n var evlistener;\n var ret;\n var events = this._events;\n\n if (!events)\n ret = [];\n else {\n evlistener = events[type];\n if (!evlistener)\n ret = [];\n else if (typeof evlistener === 'function')\n ret = [evlistener.listener || evlistener];\n else\n ret = unwrapListeners$3(evlistener);\n }\n\n return ret;\n};\n\nEventEmitter$6.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount$3.call(emitter, type);\n }\n};\n\nEventEmitter$6.prototype.listenerCount = listenerCount$3;\nfunction listenerCount$3(type) {\n var events = this._events;\n\n if (events) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter$6.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne$3(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\n}\n\nfunction arrayClone$3(arr, i) {\n var copy = new Array(i);\n while (i--)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction unwrapListeners$3(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nclass EventEmitter$5 extends EventEmitter$6 {}\n\nvar MEDIA = 'MEDIA';\nvar DEVICE = 'DEVICE';\nvar MEDIA_STREAM_TRACK = 'MEDIA_STREAM_TRACK';\n\nvar LEVELS = {\n error: 1,\n warn: 2,\n info: 3,\n debug: 4\n};\nvar logFormat = (level, logDetails) => {\n var {\n ID,\n mediaType,\n action,\n description,\n error\n } = logDetails;\n var timestamp = new Date().toISOString();\n var errorText = error ? error.stack ? \"\".concat(error.message, \": \").concat(error.stack) : \"\".concat(error) : '';\n return \"\".concat(timestamp, \" \").concat(level, \" \").concat(ID || '', \" \").concat(mediaType, \" \").concat(action, \" \").concat(description, \" \").concat(errorText).replace(/\\s+/g, ' ').trim();\n};\nvar currentLevel = 'error';\nvar log$3 = (level, args) => {\n if (LEVELS[level] <= LEVELS[currentLevel]) {\n console.log(logFormat(level, args));\n }\n};\nvar logger$4 = {\n info: args => log$3('info', args),\n warn: args => log$3('warn', args),\n error: args => log$3('error', args),\n debug: args => log$3('debug', args)\n};\nvar _loop = function _loop(level) {\n logger$4[level] = logInfo => {\n var {\n ID,\n mediaType,\n action,\n description,\n error\n } = logInfo;\n currentLevel = level;\n return log$3(level, {\n ID,\n mediaType,\n action,\n description,\n error\n });\n };\n};\nfor (var level of ['info', 'warn', 'error', 'debug']) {\n _loop(level);\n}\n\nfunction _classPrivateFieldInitSpec$1(obj, privateMap, value) { _checkPrivateRedeclaration$1(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration$1(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nvar DeviceKinds;\n(function (DeviceKinds) {\n DeviceKinds[\"AUDIO_INPUT\"] = \"audioinput\";\n DeviceKinds[\"AUDIO_OUTPUT\"] = \"audiooutput\";\n DeviceKinds[\"VIDEO_INPUT\"] = \"videoinput\";\n})(DeviceKinds || (DeviceKinds = {}));\nvar _mediaDeviceInfo = /*#__PURE__*/new WeakMap();\nclass Device {\n constructor(mediaDeviceInfo) {\n _defineProperty(this, \"ID\", void 0);\n _defineProperty(this, \"groupID\", void 0);\n _defineProperty(this, \"label\", void 0);\n _defineProperty(this, \"kind\", void 0);\n _classPrivateFieldInitSpec$1(this, _mediaDeviceInfo, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldSet(this, _mediaDeviceInfo, mediaDeviceInfo);\n this.ID = _classPrivateFieldGet(this, _mediaDeviceInfo).deviceId;\n this.groupID = _classPrivateFieldGet(this, _mediaDeviceInfo).groupId;\n this.label = _classPrivateFieldGet(this, _mediaDeviceInfo).label;\n this.kind = _classPrivateFieldGet(this, _mediaDeviceInfo).kind;\n }\n}\n\nfunction getTrackSettings(track) {\n logger$4.debug({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'getTrackSettings()',\n description: 'Called'\n });\n var settings = track.getSettings();\n if (settings) {\n logger$4.debug({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'getTrackSettings()',\n description: \"Returning track settings \".concat(JSON.stringify(settings))\n });\n return settings;\n }\n var error = new Error('Unable to get track settings');\n logger$4.info({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'getTrackSettings()',\n description: error.message,\n error\n });\n return {};\n}\n\nvar TrackEventNames;\n(function (TrackEventNames) {\n TrackEventNames[\"TRACK_MUTE_STATE_CHANGED\"] = \"track:mute\";\n})(TrackEventNames || (TrackEventNames = {}));\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nvar TrackStatus;\n(function (TrackStatus) {\n TrackStatus[\"ENDED\"] = \"ended\";\n TrackStatus[\"LIVE\"] = \"live\";\n})(TrackStatus || (TrackStatus = {}));\nvar TrackKind;\n(function (TrackKind) {\n TrackKind[\"AUDIO\"] = \"audio\";\n TrackKind[\"VIDEO\"] = \"video\";\n})(TrackKind || (TrackKind = {}));\nvar _mediaStreamTrack = /*#__PURE__*/new WeakMap();\nclass Track extends EventEmitter$5 {\n constructor(mediaStreamTrack) {\n super();\n _defineProperty(this, \"ID\", void 0);\n _defineProperty(this, \"kind\", void 0);\n _defineProperty(this, \"status\", void 0);\n _defineProperty(this, \"muted\", void 0);\n _defineProperty(this, \"label\", void 0);\n _classPrivateFieldInitSpec(this, _mediaStreamTrack, {\n writable: true,\n value: void 0\n });\n this.ID = mediaStreamTrack.id;\n this.kind = mediaStreamTrack.kind;\n this.status = mediaStreamTrack.readyState;\n this.muted = mediaStreamTrack.muted;\n this.label = mediaStreamTrack.label;\n _classPrivateFieldSet(this, _mediaStreamTrack, mediaStreamTrack);\n _classPrivateFieldGet(this, _mediaStreamTrack).onmute = () => {\n var action = _classPrivateFieldGet(this, _mediaStreamTrack).enabled ? 'muted' : 'unmuted';\n this.emit(TrackEventNames.TRACK_MUTE_STATE_CHANGED, {\n action\n });\n };\n }\n stop() {\n _classPrivateFieldGet(this, _mediaStreamTrack).stop();\n this.status = TrackStatus.ENDED;\n }\n applyConstraints(constraints) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var _constraints$deviceId, _constraints$deviceId2, _constraints$deviceId5;\n logger$4.debug({\n ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId = constraints.deviceId) === null || _constraints$deviceId === void 0 ? void 0 : _constraints$deviceId.toString(),\n mediaType: DEVICE,\n action: 'applyConstraints()',\n description: \"Called with \".concat(JSON.stringify(constraints))\n });\n logger$4.info({\n ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId2 = constraints.deviceId) === null || _constraints$deviceId2 === void 0 ? void 0 : _constraints$deviceId2.toString(),\n mediaType: DEVICE,\n action: 'applyConstraints()',\n description: 'Applying constraints to track objects'\n });\n var supportedConstraints = navigator.mediaDevices.getSupportedConstraints();\n var notSupportedConstraints = [];\n for (var thisConstraint of Object.keys(constraints)) {\n if (!supportedConstraints[thisConstraint]) {\n var _constraints$deviceId3;\n logger$4.debug({\n ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId3 = constraints.deviceId) === null || _constraints$deviceId3 === void 0 ? void 0 : _constraints$deviceId3.toString(),\n mediaType: DEVICE,\n action: 'applyConstraints()',\n description: \"Not supported constraint tracked \".concat(thisConstraint)\n });\n notSupportedConstraints.push(thisConstraint);\n }\n }\n if (notSupportedConstraints.length > 0) {\n var _constraints$deviceId4;\n console.warn(\"#TrackObject Unsupported constraints - \".concat(notSupportedConstraints.join(', ')));\n logger$4.debug({\n ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId4 = constraints.deviceId) === null || _constraints$deviceId4 === void 0 ? void 0 : _constraints$deviceId4.toString(),\n mediaType: DEVICE,\n action: 'applyConstraints()',\n description: 'Constraints not applied'\n });\n return false;\n }\n yield _classPrivateFieldGet(_this, _mediaStreamTrack).applyConstraints(constraints);\n logger$4.debug({\n ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId5 = constraints.deviceId) === null || _constraints$deviceId5 === void 0 ? void 0 : _constraints$deviceId5.toString(),\n mediaType: DEVICE,\n action: 'applyConstraints()',\n description: 'Constraints applied successfully'\n });\n return true;\n })();\n }\n getSettings() {\n logger$4.debug({\n mediaType: MEDIA,\n action: 'getSettings()',\n description: 'Called'\n });\n logger$4.info({\n mediaType: MEDIA,\n action: 'getSettings()',\n description: 'Fetching constraints properties for the current media stream track'\n });\n var settings = getTrackSettings(_classPrivateFieldGet(this, _mediaStreamTrack));\n logger$4.debug({\n mediaType: MEDIA,\n action: 'getSettings()',\n description: \"Received settings \".concat(JSON.stringify(settings))\n });\n return settings;\n }\n getMediaStreamTrack() {\n logger$4.debug({\n mediaType: MEDIA,\n action: 'getMediaStreamTrack()',\n description: 'Called'\n });\n var mediaStreamTrack = _classPrivateFieldGet(this, _mediaStreamTrack);\n logger$4.debug({\n mediaType: MEDIA,\n action: 'getMediaStreamTrack()',\n description: \"Received media stream track \".concat(JSON.stringify(mediaStreamTrack))\n });\n return mediaStreamTrack;\n }\n}\n\nvar eventEmitter = new EventEmitter$5();\nvar deviceList = [];\nvar getDevices$1 = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* () {\n var _navigator$mediaDevic;\n logger$4.debug({\n mediaType: DEVICE,\n action: 'getDevices()',\n description: 'Called'\n });\n if (!((_navigator$mediaDevic = navigator.mediaDevices) !== null && _navigator$mediaDevic !== void 0 && _navigator$mediaDevic.enumerateDevices)) {\n console.warn('navigator.mediaDevices.enumerateDevices() is not supported.');\n return [];\n }\n logger$4.info({\n mediaType: DEVICE,\n action: 'getDevices()',\n description: 'Requesting list of available media input and output devices'\n });\n return navigator.mediaDevices.enumerateDevices();\n });\n return function getDevices() {\n return _ref.apply(this, arguments);\n };\n}();\nvar getCameras = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(function* () {\n logger$4.debug({\n mediaType: DEVICE,\n action: 'getCameras()',\n description: 'Called'\n });\n var devices = yield getDevices$1();\n logger$4.info({\n mediaType: DEVICE,\n action: 'getCameras()',\n description: 'Filtering camera devices from all available media devices'\n });\n return devices.filter(_ref3 => {\n var {\n kind\n } = _ref3;\n return kind === DeviceKinds.VIDEO_INPUT;\n }).map(device => {\n logger$4.debug({\n ID: device.deviceId,\n mediaType: DEVICE,\n action: 'getCameras()',\n description: \"Received camera device \".concat(JSON.stringify(device))\n });\n return new Device(device);\n });\n });\n return function getCameras() {\n return _ref2.apply(this, arguments);\n };\n}();\nvar getMicrophones = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(function* () {\n logger$4.debug({\n mediaType: DEVICE,\n action: 'getMicrophones()',\n description: 'Called'\n });\n var devices = yield getDevices$1();\n logger$4.info({\n mediaType: DEVICE,\n action: 'getMicrophones()',\n description: 'Filtering microphones devices from all available media devices'\n });\n return devices.filter(_ref5 => {\n var {\n kind\n } = _ref5;\n return kind === DeviceKinds.AUDIO_INPUT;\n }).map(device => {\n logger$4.debug({\n ID: device.deviceId,\n mediaType: DEVICE,\n action: 'getMicrophones()',\n description: \"Received microphone device \".concat(JSON.stringify(device))\n });\n return new Device(device);\n });\n });\n return function getMicrophones() {\n return _ref4.apply(this, arguments);\n };\n}();\nvar getSpeakers = /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(function* () {\n logger$4.debug({\n mediaType: DEVICE,\n action: 'getSpeakers()',\n description: 'Called'\n });\n var devices = yield getDevices$1();\n logger$4.info({\n mediaType: DEVICE,\n action: 'getSpeakers()',\n description: 'Filtering speaker devices from all available media devices'\n });\n return devices.filter(_ref7 => {\n var {\n kind\n } = _ref7;\n return kind === DeviceKinds.AUDIO_OUTPUT;\n }).map(device => {\n logger$4.debug({\n ID: device.deviceId,\n mediaType: DEVICE,\n action: 'getSpeakers()',\n description: \"Received speaker device \".concat(JSON.stringify(device))\n });\n return new Device(device);\n });\n });\n return function getSpeakers() {\n return _ref6.apply(this, arguments);\n };\n}();\nfunction getUnsupportedConstraints(mediaConstraints) {\n logger$4.debug({\n mediaType: MEDIA,\n action: 'getUnsupportedConstraints()',\n description: \"Called with \".concat(JSON.stringify(mediaConstraints))\n });\n logger$4.info({\n mediaType: MEDIA,\n action: 'getUnsupportedConstraints()',\n description: 'Filtering list of media track unsupported constraints'\n });\n var supportedConstraints = navigator.mediaDevices.getSupportedConstraints();\n var unsupportedConstraints = [];\n Object.keys(mediaConstraints).forEach(constraint => {\n if (!(Object.prototype.hasOwnProperty.call(supportedConstraints, constraint) && supportedConstraints[constraint])) {\n unsupportedConstraints.push(constraint);\n }\n });\n logger$4.debug({\n mediaType: MEDIA,\n action: 'getUnsupportedConstraints()',\n description: \"Received unsupported constraints \".concat(unsupportedConstraints)\n });\n return unsupportedConstraints;\n}\nfunction createAudioTrack(_x) {\n return _createAudioTrack.apply(this, arguments);\n}\nfunction _createAudioTrack() {\n _createAudioTrack = _asyncToGenerator(function* (device) {\n logger$4.debug({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: DEVICE,\n action: 'createAudioTrack()',\n description: \"Called \".concat(device ? \"with \".concat(JSON.stringify(device)) : '', \" \")\n });\n if (device && device.kind !== DeviceKinds.AUDIO_INPUT) {\n var _error = new Error(\"Device \".concat(device.ID, \" is not of kind AUDIO_INPUT\"));\n logger$4.error({\n ID: device.ID,\n mediaType: 'DEVICE',\n action: 'createAudioTrack()',\n description: _error.message,\n error: _error\n });\n throw _error;\n }\n logger$4.info({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: DEVICE,\n action: 'createAudioTrack()',\n description: 'Creating audio track'\n });\n var deviceConfig = device ? {\n audio: {\n deviceId: {\n exact: device.ID\n }\n }\n } : {\n audio: true,\n video: false\n };\n var stream = yield navigator.mediaDevices.getUserMedia(deviceConfig);\n var track = stream.getAudioTracks()[0];\n if (track) {\n logger$4.debug({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: DEVICE,\n action: 'createAudioTrack()',\n description: \"Received audio track \".concat(JSON.stringify(track))\n });\n return new Track(track);\n }\n var error = new Error(\"Device could not obtain an audio track of kind \".concat(device === null || device === void 0 ? void 0 : device.kind));\n logger$4.error({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: 'DEVICE',\n action: 'createAudioTrack()',\n description: error.message,\n error\n });\n throw error;\n });\n return _createAudioTrack.apply(this, arguments);\n}\nfunction createVideoTrack(_x2) {\n return _createVideoTrack.apply(this, arguments);\n}\nfunction _createVideoTrack() {\n _createVideoTrack = _asyncToGenerator(function* (device) {\n logger$4.debug({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: DEVICE,\n action: 'createVideoTrack()',\n description: \"Called \".concat(device ? \"with \".concat(JSON.stringify(device)) : '', \" \")\n });\n if (device && device.kind !== DeviceKinds.VIDEO_INPUT) {\n var _error2 = new Error(\"Device \".concat(device.ID, \" is not of kind VIDEO_INPUT\"));\n logger$4.error({\n ID: device.ID,\n mediaType: 'DEVICE',\n action: 'createVideoTrack()',\n description: _error2.message,\n error: _error2\n });\n throw _error2;\n }\n logger$4.info({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: DEVICE,\n action: 'createVideoTrack()',\n description: 'Creating video track'\n });\n var deviceConfig = device ? {\n video: {\n deviceId: {\n exact: device.ID\n }\n }\n } : {\n audio: false,\n video: true\n };\n var stream = yield navigator.mediaDevices.getUserMedia(deviceConfig);\n var track = stream.getVideoTracks()[0];\n if (track) {\n logger$4.debug({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: DEVICE,\n action: 'createVideoTrack()',\n description: \"Received video track \".concat(JSON.stringify(track))\n });\n return new Track(track);\n }\n var error = new Error(\"Device could not obtain a video track of kind \".concat(device === null || device === void 0 ? void 0 : device.kind));\n logger$4.error({\n ID: device === null || device === void 0 ? void 0 : device.ID,\n mediaType: 'DEVICE',\n action: 'createVideoTrack()',\n description: error.message,\n error\n });\n throw error;\n });\n return _createVideoTrack.apply(this, arguments);\n}\nfunction createContentTrack(_x3) {\n return _createContentTrack.apply(this, arguments);\n}\nfunction _createContentTrack() {\n _createContentTrack = _asyncToGenerator(function* (mediaConstraints) {\n var _mediaConstraints$dev, _mediaConstraints$dev2, _mediaConstraints$dev7;\n logger$4.debug({\n ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev = mediaConstraints.deviceId) === null || _mediaConstraints$dev === void 0 ? void 0 : _mediaConstraints$dev.toString(),\n mediaType: DEVICE,\n action: 'createContentTrack()',\n description: \"Called \".concat(mediaConstraints ? \"with \".concat(JSON.stringify(mediaConstraints)) : '', \" \")\n });\n logger$4.info({\n ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev2 = mediaConstraints.deviceId) === null || _mediaConstraints$dev2 === void 0 ? void 0 : _mediaConstraints$dev2.toString(),\n mediaType: MEDIA,\n action: 'createContentTrack()',\n description: 'Creating content track'\n });\n var deviceConfig = {\n audio: false,\n video: true\n };\n var track;\n var stream;\n try {\n stream = yield navigator.mediaDevices.getDisplayMedia(deviceConfig);\n [track] = stream.getVideoTracks();\n } catch (error) {\n if (error instanceof Error) {\n var _mediaConstraints$dev3;\n logger$4.error({\n ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev3 = mediaConstraints.deviceId) === null || _mediaConstraints$dev3 === void 0 ? void 0 : _mediaConstraints$dev3.toString(),\n mediaType: 'DEVICE',\n action: 'createContentTrack()',\n description: error.message,\n error\n });\n }\n throw error;\n }\n if (mediaConstraints) {\n var unsupportedConstraints = getUnsupportedConstraints(mediaConstraints);\n if (unsupportedConstraints.length <= 0) {\n var _mediaConstraints$dev4;\n track.applyConstraints(mediaConstraints);\n logger$4.debug({\n ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev4 = mediaConstraints.deviceId) === null || _mediaConstraints$dev4 === void 0 ? void 0 : _mediaConstraints$dev4.toString(),\n mediaType: DEVICE,\n action: 'createContentTrack()',\n description: 'Applied media constraints to fetched content track'\n });\n } else {\n var _mediaConstraints$dev5;\n var _error3 = new Error(\"\".concat(unsupportedConstraints.join(', '), \" constraint is not supported by browser\"));\n logger$4.error({\n ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev5 = mediaConstraints.deviceId) === null || _mediaConstraints$dev5 === void 0 ? void 0 : _mediaConstraints$dev5.toString(),\n mediaType: 'DEVICE',\n action: 'createContentTrack()',\n description: _error3.message,\n error: _error3\n });\n throw _error3;\n }\n }\n if (track) {\n var _mediaConstraints$dev6;\n logger$4.debug({\n ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev6 = mediaConstraints.deviceId) === null || _mediaConstraints$dev6 === void 0 ? void 0 : _mediaConstraints$dev6.toString(),\n mediaType: DEVICE,\n action: 'createContentTrack()',\n description: \"Received content track \".concat(JSON.stringify(track))\n });\n return new Track(track);\n }\n var error = new Error('Could not obtain a content track');\n logger$4.error({\n ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev7 = mediaConstraints.deviceId) === null || _mediaConstraints$dev7 === void 0 ? void 0 : _mediaConstraints$dev7.toString(),\n mediaType: 'DEVICE',\n action: 'createContentTrack()',\n description: error.message,\n error\n });\n throw error;\n });\n return _createContentTrack.apply(this, arguments);\n}\nfunction deviceChangePublisher() {\n return _deviceChangePublisher.apply(this, arguments);\n}\nfunction _deviceChangePublisher() {\n _deviceChangePublisher = _asyncToGenerator(function* () {\n var _navigator$mediaDevic2;\n logger$4.debug({\n mediaType: DEVICE,\n action: 'deviceChangePublisher()',\n description: 'Called'\n });\n if (!((_navigator$mediaDevic2 = navigator.mediaDevices) !== null && _navigator$mediaDevic2 !== void 0 && _navigator$mediaDevic2.enumerateDevices)) {\n console.warn('navigator.mediaDevices.enumerateDevices() is not supported.');\n return;\n }\n logger$4.info({\n mediaType: DEVICE,\n action: 'deviceChangePublisher()',\n description: 'Calling individual subscription listener obtained by device change event'\n });\n var newDeviceList = yield navigator.mediaDevices.enumerateDevices();\n var filtered = [];\n var getGroupIdsFrom = [];\n var filterDevicesFrom = [];\n var action = 'changed';\n var deviceListGroups = new Set();\n if (newDeviceList.length !== deviceList.length) {\n [getGroupIdsFrom, filterDevicesFrom, action] = newDeviceList.length < deviceList.length ? [newDeviceList, deviceList, 'removed'] : [deviceList, newDeviceList, 'added'];\n getGroupIdsFrom.forEach(device => {\n deviceListGroups.add(device.groupId);\n });\n filtered = filterDevicesFrom.filter(device => !deviceListGroups.has(device.groupId));\n deviceList.splice(0, deviceList.length);\n deviceList.push(...newDeviceList);\n eventEmitter.emit('device:changed', {\n action,\n devices: filtered\n });\n }\n });\n return _deviceChangePublisher.apply(this, arguments);\n}\nfunction on$1(_x4, _x5) {\n return _on.apply(this, arguments);\n}\nfunction _on() {\n _on = _asyncToGenerator(function* (eventName, listener) {\n logger$4.debug({\n mediaType: MEDIA,\n action: 'on()',\n description: \"Subscribing to an \".concat(eventName, \",\").concat(listener)\n });\n eventEmitter.on(eventName, listener);\n if (eventName === 'device:changed') {\n var thisDeviceList = yield getDevices$1();\n deviceList.push(...thisDeviceList);\n navigator.mediaDevices.addEventListener('devicechange', deviceChangePublisher);\n }\n });\n return _on.apply(this, arguments);\n}\nvar off$1 = (eventName, listener) => {\n logger$4.debug({\n mediaType: MEDIA,\n action: 'off()',\n description: \"Called \".concat(eventName, \" with \").concat(listener, \" listener\")\n });\n eventEmitter.off(eventName, listener);\n};\n\nvar bnrProcessor = {\n isModuleAdded: false,\n workletProcessorUrl: 'https://models.intelligence.webex.com/bnr/1.1.0/noise-reduction-effect.worklet.js'\n};\nfunction isValidTrack(track) {\n var supportedConstraints = navigator.mediaDevices.getSupportedConstraints();\n var supportedSampleRates = [16000, 32000, 48000];\n if (supportedConstraints.sampleRate) {\n var settings = getTrackSettings(track);\n var {\n sampleRate\n } = settings;\n if (sampleRate && !supportedSampleRates.includes(sampleRate)) {\n var error = new Error(\"Sample rate of \".concat(sampleRate, \" is not supported.\"));\n logger$4.error({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'isValidTrack()',\n description: error.message,\n error\n });\n throw error;\n } else {\n return true;\n }\n } else {\n var _error = new Error('Not supported');\n logger$4.info({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'isValidTrack()',\n description: _error.message,\n error: _error\n });\n return true;\n }\n}\nfunction loadProcessor() {\n return _loadProcessor.apply(this, arguments);\n}\nfunction _loadProcessor() {\n _loadProcessor = _asyncToGenerator(function* () {\n logger$4.info({\n mediaType: MEDIA_STREAM_TRACK,\n action: 'loadProcessor()',\n description: 'Creating and loading BNR module'\n });\n var audioContext = new AudioContext();\n bnrProcessor.isModuleAdded = true;\n bnrProcessor.audioContext = audioContext;\n yield audioContext.audioWorklet.addModule(bnrProcessor.workletProcessorUrl);\n bnrProcessor.workletNode = new AudioWorkletNode(audioContext, 'noise-reduction-worklet-processor');\n return audioContext;\n });\n return _loadProcessor.apply(this, arguments);\n}\nfunction enableBNR(_x) {\n return _enableBNR.apply(this, arguments);\n}\nfunction _enableBNR() {\n _enableBNR = _asyncToGenerator(function* (track) {\n logger$4.debug({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'enableBNR()',\n description: 'Called'\n });\n try {\n isValidTrack(track);\n var streamFromTrack = new MediaStream();\n streamFromTrack.addTrack(track);\n var workletNode;\n logger$4.info({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'enableBNR()',\n description: 'Checking if BNR module is present already'\n });\n var oldDestinationTrack = bnrProcessor.destinationTrack;\n if (oldDestinationTrack && track.id === oldDestinationTrack.id) {\n var oldTrackErrorMsg = 'BNR is enabled on the track already';\n var oldTrackError = new Error(oldTrackErrorMsg);\n logger$4.error({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'enableBNR()',\n description: oldTrackErrorMsg,\n error: oldTrackError\n });\n throw oldTrackError;\n }\n if (bnrProcessor.isModuleAdded) {\n logger$4.debug({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'enableBNR()',\n description: 'Disposing existing BNR module'\n });\n workletNode = bnrProcessor.workletNode;\n workletNode.port.postMessage('DISPOSE');\n }\n logger$4.info({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'enableBNR()',\n description: 'Creating worklet node, connecting source and destination streams'\n });\n var audioContext = yield loadProcessor();\n workletNode = bnrProcessor.workletNode;\n workletNode.port.postMessage('ENABLE');\n bnrProcessor.sourceNode = audioContext.createMediaStreamSource(streamFromTrack);\n bnrProcessor.sourceNode.connect(workletNode);\n bnrProcessor.destinationStream = audioContext.createMediaStreamDestination();\n workletNode.connect(bnrProcessor.destinationStream);\n logger$4.info({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'enableBNR()',\n description: 'Obtaining noise reduced track and returning'\n });\n var destinationStream = bnrProcessor.destinationStream.stream;\n var [destinationTrack] = destinationStream.getAudioTracks();\n bnrProcessor.destinationTrack = destinationTrack;\n return destinationTrack;\n } catch (error) {\n logger$4.error({\n ID: track.id,\n mediaType: MEDIA_STREAM_TRACK,\n action: 'enableBNR()',\n description: 'Error in enableBNR',\n error: error\n });\n throw error;\n }\n });\n return _enableBNR.apply(this, arguments);\n}\nfunction disableBNR() {\n logger$4.debug({\n mediaType: MEDIA_STREAM_TRACK,\n action: 'disableBNR()',\n description: 'Called'\n });\n try {\n var workletNode;\n logger$4.info({\n mediaType: MEDIA_STREAM_TRACK,\n action: 'disableBNR()',\n description: 'Checking if BNR is enabled before disabling'\n });\n if (!bnrProcessor.isModuleAdded) {\n var error = new Error('Can not disable as BNR is not enabled');\n logger$4.error({\n mediaType: MEDIA_STREAM_TRACK,\n action: 'disableBNR()',\n description: 'Can not disable as BNR is not enabled'\n });\n throw error;\n } else {\n logger$4.info({\n mediaType: MEDIA_STREAM_TRACK,\n action: 'disableBNR()',\n description: 'Using existing AudioWorkletNode for disabling BNR'\n });\n workletNode = bnrProcessor.workletNode;\n }\n workletNode.port.postMessage('DISPOSE');\n logger$4.info({\n mediaType: MEDIA_STREAM_TRACK,\n action: 'disableBNR()',\n description: 'Obtaining raw media stream track and removing bnr context'\n });\n var bnrDisabledStream = bnrProcessor.sourceNode.mediaStream;\n var [track] = bnrDisabledStream === null || bnrDisabledStream === void 0 ? void 0 : bnrDisabledStream.getAudioTracks();\n bnrProcessor.isModuleAdded = false;\n delete bnrProcessor.workletNode;\n delete bnrProcessor.audioContext;\n delete bnrProcessor.sourceNode;\n delete bnrProcessor.destinationStream;\n delete bnrProcessor.destinationTrack;\n return track;\n } catch (error) {\n logger$4.error({\n mediaType: MEDIA_STREAM_TRACK,\n action: 'disableBNR()',\n description: 'Error in disableBNR',\n error: error\n });\n throw error;\n }\n}\n\nvar ErrorCode;\n(function (ErrorCode) {\n ErrorCode[ErrorCode[\"MediaConnectionError\"] = 30001] = \"MediaConnectionError\";\n ErrorCode[ErrorCode[\"SdpError\"] = 30002] = \"SdpError\";\n ErrorCode[ErrorCode[\"IceGatheringError\"] = 30003] = \"IceGatheringError\";\n ErrorCode[ErrorCode[\"SdpAnswerHandlingError\"] = 30004] = \"SdpAnswerHandlingError\";\n ErrorCode[ErrorCode[\"SdpOfferCreationError\"] = 30005] = \"SdpOfferCreationError\";\n ErrorCode[ErrorCode[\"SdpOfferHandlingError\"] = 30006] = \"SdpOfferHandlingError\";\n})(ErrorCode || (ErrorCode = {}));\n\nclass MediaConnectionError extends Error {\n constructor(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(message);\n _defineProperty(this, \"code\", void 0);\n this.name = options.name || 'MediaConnectionError';\n this.cause = options.cause;\n this.code = options.code || ErrorCode.MediaConnectionError;\n }\n}\n\nfunction ownKeys$9(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$9(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$9(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$9(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass SdpError extends MediaConnectionError {\n constructor(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(message, _objectSpread$9({\n code: ErrorCode.SdpError,\n name: 'SdpError'\n }, options));\n }\n}\n\nfunction ownKeys$8(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$8(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$8(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$8(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass IceGatheringError extends SdpError {\n constructor(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(message, _objectSpread$8({\n code: ErrorCode.IceGatheringError,\n name: 'IceGatheringError'\n }, options));\n }\n}\n\nfunction ownKeys$7(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$7(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$7(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$7(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass SdpAnswerHandlingError extends SdpError {\n constructor(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(message, _objectSpread$7({\n code: ErrorCode.SdpAnswerHandlingError,\n name: 'SdpAnswerHandlingError'\n }, options));\n }\n}\n\nfunction ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$6(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass SdpOfferCreationError extends SdpError {\n constructor(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(message, _objectSpread$6({\n code: ErrorCode.SdpOfferCreationError,\n name: 'SdpOfferCreationError'\n }, options));\n }\n}\n\nfunction ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$5(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass SdpOfferHandlingError extends SdpError {\n constructor(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(message, _objectSpread$5({\n code: ErrorCode.SdpOfferHandlingError,\n name: 'SdpOfferHandlingError'\n }, options));\n }\n}\n\nvar Error$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get ErrorCode () { return ErrorCode; },\n IceGatheringError: IceGatheringError,\n MediaConnectionError: MediaConnectionError,\n SdpAnswerHandlingError: SdpAnswerHandlingError,\n SdpError: SdpError,\n SdpOfferCreationError: SdpOfferCreationError,\n SdpOfferHandlingError: SdpOfferHandlingError\n});\n\nvar commonjsGlobal$5 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nvar rtcstats$1 = {};\n\nvar __awaiter$3 = commonjsGlobal$5 && commonjsGlobal$5.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator$1 = commonjsGlobal$5 && commonjsGlobal$5.__generator || function (thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) {\n 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:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n};\nObject.defineProperty(rtcstats$1, \"__esModule\", {\n value: true\n});\nvar rtcStats_1$1 = rtcstats$1.rtcStats = void 0;\n/**\n * Copies values of any nested depth.\n *\n * @param value - The value to be copied.\n * @returns - Copied value.\n */\nvar deepCopy$2 = function deepCopy(value) {\n return JSON.parse(JSON.stringify(value));\n};\n/**\n * Check deep equality between two values.\n *\n * @param value1 - First value to check.\n * @param value2 - Second value to check.\n * @returns True if values are deeply equal, false otherwise.\n */\nvar deepEqual$1 = function deepEqual(value1, value2) {\n // If both immutable values are equal, return true.\n if (value1 === value2) {\n return true;\n }\n // If both are objects, we check the length and properties of each.\n if (value1 && value2 && typeof value1 === 'object' && typeof value2 === 'object') {\n if (value1.constructor !== value2.constructor) return false;\n // Return false if the objects are of different sizes.\n if (Object.keys(value1).length !== Object.keys(value2).length) {\n return false;\n }\n // Deep equal check each property in the object, returns true if we found no\n // differing properties.\n return Object.keys(value1).reduce(function (val, prop) {\n if (value2[prop]) {\n if (!deepEqual(value1[prop], value2[prop])) {\n return false;\n }\n } else {\n return false;\n }\n return val;\n }, true);\n }\n // Return false if no other conditions are met.\n return false;\n};\n/**\n * Translates a Map into an object.\n *\n * @param report - The report in Map form.\n * @returns - A deduped object.\n */\nvar map2obj$1 = function map2obj(report) {\n if (!report.size) {\n return report;\n }\n var o = {};\n report.forEach(function (value, key) {\n o[key] = value;\n });\n return o;\n};\nvar dumpStream$1 = function dumpStream(stream) {\n return {\n id: stream.id,\n tracks: stream.getTracks().map(function (track) {\n return {\n id: track.id,\n kind: track.kind,\n label: track.label,\n enabled: track.enabled,\n muted: track.muted,\n readyState: track.readyState\n };\n })\n };\n};\nvar persistedKeys$1 = ['type', 'id', 'timestamp'];\n/**\n * Check to see if the report consists of more than just the persisted metadata.\n *\n * @param report - The report line being checked.\n * @returns True if the report item contains non-persisted keys, false otherwise.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar hasNonMetadata$1 = function hasNonMetadata(report) {\n return !!Object.keys(report).filter(function (key) {\n return !persistedKeys$1.includes(key);\n }).length;\n};\n/**\n * Apply a delta compression to the stats report. Reduces size by ~90%.\n * To reduce further, report keys could be compressed.\n *\n * @param oldStats - Previous report items that we dedupe against.\n * @param newStats - New incoming stats.\n * @returns - Compressed Stats.\n */\nvar deltaCompression$1 = function deltaCompression(oldStats, newStats) {\n var updatedStats = deepCopy$2(newStats);\n Object.keys(updatedStats).forEach(function (id) {\n var report = updatedStats[id];\n if (!oldStats[id]) {\n return;\n }\n // Persist specific values beyond delta compression, as long as they\n // aren't the only non-deduped keys.\n Object.keys(report).forEach(function (name) {\n if (deepEqual$1(report[name], oldStats[id][name]) && !persistedKeys$1.includes(name)) {\n delete updatedStats[id][name];\n }\n if (!hasNonMetadata$1(report)) {\n delete updatedStats[id];\n }\n });\n });\n // Use the most recent timestamp.\n var timestamp = -Infinity;\n Object.keys(updatedStats).forEach(function (id) {\n var report = updatedStats[id];\n if (report.timestamp > timestamp) {\n timestamp = report.timestamp;\n }\n });\n // Delete the timestamps on each item.\n Object.keys(updatedStats).forEach(function (id) {\n var report = updatedStats[id];\n if (report.timestamp === timestamp) {\n delete report.timestamp;\n }\n });\n updatedStats.timestamp = timestamp;\n return updatedStats;\n};\n/**\n * Format the stats report into an array.\n *\n * @param report - A WebRTC stats report.\n * @returns - An array of Stats Report items.\n */\nvar formatStatsReport$1 = function formatStatsReport(report) {\n return Object.keys(report).filter(function (name) {\n return name !== 'timestamp';\n }).map(function (name) {\n return JSON.stringify(report[name]);\n });\n};\n/**\n * Parametrize a single string event to contain type and an (empty) id.\n *\n * @param value - The value to parametrize.\n * @returns An event object.\n */\nvar makeEvent$1 = function makeEvent(value) {\n return [JSON.stringify({\n value: value,\n type: 'string',\n id: ''\n })];\n};\n/**\n * Attach a Peer Connection to periodically get updated on events and stats.\n *\n * @param pc - Peer Connection in which we attach.\n * @param logger - Logging function to log events and stats.\n * @param intervalTime - Time between each `getStats` check.\n * @param statsPreProcessor - Optional function that modifies stats.\n */\nvar rtcStats$1 = function rtcStats(pc, logger, intervalTime, statsPreProcessor) {\n if (statsPreProcessor === void 0) {\n statsPreProcessor = function statsPreProcessor() {\n return Promise.resolve();\n };\n }\n var prev = {};\n /**\n * Log stats or event data with additional tracking information.\n *\n * @param name - Name of the event to log.\n * @param payload - Log data pertaining to the event.\n * @param timestamp - Time the event happened in milliseconds.\n */\n var trace = function trace(name, payload, timestamp) {\n logger({\n timestamp: timestamp ? Math.round(timestamp) : Date.now(),\n name: name,\n payload: payload\n });\n };\n trace('rtcConfiguration', makeEvent$1(JSON.stringify(pc.getConfiguration())));\n var origPeerConnection = window.RTCPeerConnection;\n pc.addEventListener('icecandidate', function (e) {\n if (e.candidate) {\n trace('onicecandidate', makeEvent$1(JSON.stringify(e.candidate)));\n }\n });\n pc.addEventListener('icecandidateerror', function (event) {\n var url = event.url,\n errorCode = event.errorCode,\n errorText = event.errorText;\n trace('onicecandidateerror', makeEvent$1(\"[\".concat(url, \"] \").concat(errorCode, \": \").concat(errorText)));\n });\n pc.addEventListener('track', function (e) {\n trace('ontrack', makeEvent$1(\"\".concat(e.track.kind, \":\").concat(e.track.id, \" \").concat(e.streams.map(function (stream) {\n return \"stream:\".concat(stream.id);\n }).join(' '))));\n });\n pc.addEventListener('signalingstatechange', function () {\n trace('onsignalingstatechange', makeEvent$1(pc.signalingState));\n });\n pc.addEventListener('iceconnectionstatechange', function () {\n trace('oniceconnectionstatechange', makeEvent$1(pc.iceConnectionState));\n });\n pc.addEventListener('icegatheringstatechange', function () {\n trace('onicegatheringstatechange', makeEvent$1(pc.iceGatheringState));\n });\n pc.addEventListener('connectionstatechange', function () {\n trace('onconnectionstatechange', makeEvent$1(pc.connectionState));\n });\n pc.addEventListener('negotiationneeded', function () {\n trace('onnegotiationneeded', makeEvent$1('negotiationneeded'));\n });\n pc.addEventListener('datachannel', function (event) {\n trace('ondatachannel', makeEvent$1(\"\".concat(event.channel.id, \": \").concat(event.channel.label)));\n });\n ['close'].forEach(function (method) {\n var nativeMethod = origPeerConnection.prototype[method];\n if (nativeMethod) {\n origPeerConnection.prototype[method] = function () {\n trace(\"on\".concat(method), makeEvent$1(method));\n return nativeMethod.apply(this, arguments);\n };\n }\n });\n ['createDataChannel'].forEach(function (method) {\n var nativeMethod = origPeerConnection.prototype[method];\n if (nativeMethod) {\n origPeerConnection.prototype[method] = function () {\n trace(\"on\".concat(method), makeEvent$1(method));\n var dataChannel = nativeMethod.apply(this, arguments);\n dataChannel.addEventListener('open', function () {\n trace(\"ondataChannelOpen\", makeEvent$1(\"\".concat(dataChannel.id, \":\").concat(dataChannel.label)));\n });\n dataChannel.addEventListener('close', function () {\n trace(\"ondataChannelClose\", makeEvent$1(\"\".concat(dataChannel.id, \":\").concat(dataChannel.label)));\n });\n dataChannel.addEventListener('error', function (event) {\n var error = event.error;\n trace(\"ondataChannelError\", makeEvent$1(\"\".concat(dataChannel.id, \":\").concat(dataChannel.label, \": \").concat(error.errorDetail)));\n });\n return dataChannel;\n };\n }\n });\n ['addStream', 'removeStream'].forEach(function (method) {\n var nativeMethod = origPeerConnection.prototype[method];\n if (nativeMethod) {\n origPeerConnection.prototype[method] = function () {\n var stream = arguments[0];\n var streamInfo = stream.getTracks().map(function (t) {\n return \"\".concat(t.kind, \":\").concat(t.id);\n }).join(',');\n trace(\"on\".concat(method), makeEvent$1(\"\".concat(stream.id, \" \").concat(streamInfo)));\n return nativeMethod.apply(this, arguments);\n };\n }\n });\n ['addTrack'].forEach(function (method) {\n var nativeMethod = origPeerConnection.prototype[method];\n if (nativeMethod) {\n origPeerConnection.prototype[method] = function () {\n var track = arguments[0];\n var streams = [].slice.call(arguments, 1);\n trace(\"on\".concat(method), makeEvent$1(\"\".concat(track.kind, \":\").concat(track.id, \" \").concat(streams.map(function (s) {\n return \"stream:\".concat(s.id);\n }).join(';') || '-')));\n return nativeMethod.apply(this, arguments);\n };\n }\n });\n ['removeTrack'].forEach(function (method) {\n var nativeMethod = origPeerConnection.prototype[method];\n if (nativeMethod) {\n origPeerConnection.prototype[method] = function () {\n var track = arguments[0].track;\n trace(\"on\".concat(method), makeEvent$1(track ? \"\".concat(track.kind, \":\").concat(track.id) : 'null'));\n return nativeMethod.apply(this, arguments);\n };\n }\n });\n ['createOffer', 'createAnswer'].forEach(function (method) {\n var nativeMethod = origPeerConnection.prototype[method];\n if (nativeMethod) {\n origPeerConnection.prototype[method] = function () {\n var opts;\n var args = arguments;\n if (arguments.length === 1 && typeof arguments[0] === 'object') {\n // eslint-disable-next-line prefer-destructuring\n opts = arguments[0];\n } else if (arguments.length === 3 && typeof arguments[2] === 'object') {\n // eslint-disable-next-line prefer-destructuring\n opts = arguments[2];\n }\n trace(\"on\".concat(method), makeEvent$1(opts || ''));\n return nativeMethod.apply(this, opts ? [opts] : undefined).then(function (description) {\n trace(\"on\".concat(method, \"OnSuccess\"), makeEvent$1(description.sdp));\n if (args.length > 0 && typeof args[0] === 'function') {\n args[0].apply(null, [description]);\n return undefined;\n }\n return description;\n }, function (err) {\n trace(\"on\".concat(method, \"OnFailure\"), makeEvent$1(err.toString()));\n if (args.length > 1 && typeof args[1] === 'function') {\n args[1].apply(null, [err]);\n return;\n }\n throw err;\n });\n };\n }\n });\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n var nativeMethod = origPeerConnection.prototype[method];\n if (nativeMethod) {\n origPeerConnection.prototype[method] = function () {\n var _this = this;\n var args = arguments;\n trace(\"on\".concat(method), makeEvent$1(method === 'addIceCandidate' ? arguments[0] : arguments[0] ? arguments[0].sdp : 'undefined'));\n return nativeMethod.apply(this, [arguments[0]]).then(function () {\n var _a;\n trace(\"on\".concat(method, \"OnSuccess\"), makeEvent$1('success'));\n if (method.endsWith('Description')) {\n if (!_this.transportEventsPreviouslyAdded) {\n var senders = _this.getSenders();\n var _loop_1 = function _loop_1(sender) {\n if (sender.transport) {\n sender.transport.addEventListener('statechange', function () {\n if (sender && sender.transport) {\n trace(\"ondtlsStateChange\", makeEvent$1(sender.transport.state));\n }\n });\n sender.transport.addEventListener('error', function (error) {\n var errorEvent = error;\n trace(\"ondtlsError\", makeEvent$1(errorEvent.error.errorDetail));\n });\n if (sender.transport.iceTransport) {\n sender.transport.iceTransport.addEventListener('selectedcandidatepairchange', function () {\n var _a, _b, _c, _d, _e, _f;\n if (sender.transport && sender.transport.iceTransport) {\n var pair = sender.transport.iceTransport.getSelectedCandidatePair();\n var localCandidate = \"\".concat((_a = pair === null || pair === void 0 ? void 0 : pair.local) === null || _a === void 0 ? void 0 : _a.address, \":\").concat((_b = pair === null || pair === void 0 ? void 0 : pair.local) === null || _b === void 0 ? void 0 : _b.port, \"/\").concat((_c = pair === null || pair === void 0 ? void 0 : pair.local) === null || _c === void 0 ? void 0 : _c.protocol);\n var remoteCandidate = \"\".concat((_d = pair === null || pair === void 0 ? void 0 : pair.remote) === null || _d === void 0 ? void 0 : _d.address, \":\").concat((_e = pair === null || pair === void 0 ? void 0 : pair.remote) === null || _e === void 0 ? void 0 : _e.port, \"/\").concat((_f = pair === null || pair === void 0 ? void 0 : pair.remote) === null || _f === void 0 ? void 0 : _f.protocol);\n var pairString = \"local: \".concat(localCandidate, \", remote: \").concat(remoteCandidate);\n trace('onselectedCandidatePairChange', makeEvent$1(pairString));\n }\n });\n }\n _this.transportEventsPreviouslyAdded = true;\n if (pc.getConfiguration().bundlePolicy === 'max-bundle') {\n return \"break\";\n }\n }\n };\n for (var _i = 0, senders_1 = senders; _i < senders_1.length; _i++) {\n var sender = senders_1[_i];\n var state_1 = _loop_1(sender);\n if (state_1 === \"break\") break;\n }\n }\n if (!_this.sctpEventsPreviouslyAdded) {\n // Some Firefox versions prior to 113 have sctp defined but not the events, so check both here.\n if ((_a = _this.sctp) === null || _a === void 0 ? void 0 : _a.addEventListener) {\n _this.sctp.addEventListener('statechange', function () {\n trace('onsctpStateChange', makeEvent$1(_this.sctp.state));\n });\n _this.sctpEventsPreviouslyAdded = true;\n }\n }\n }\n if (args.length >= 2 && typeof args[1] === 'function') {\n args[1].apply(null, []);\n return undefined;\n }\n return undefined;\n }, function (err) {\n trace(\"on\".concat(method, \"OnFailure\"), makeEvent$1(err.toString()));\n if (args.length >= 3 && typeof args[2] === 'function') {\n args[2].apply(null, [err]);\n return undefined;\n }\n throw err;\n });\n };\n }\n });\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n var origGetUserMedia_1 = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n var gum = function gum() {\n trace('onnavigator.mediaDevices.getUserMedia', makeEvent$1(JSON.stringify(arguments[0])));\n return origGetUserMedia_1.apply(navigator.mediaDevices, arguments).then(function (stream) {\n trace('onnavigator.mediaDevices.getUserMediaOnSuccess', makeEvent$1(JSON.stringify(dumpStream$1(stream))));\n return stream;\n }, function (err) {\n trace('onnavigator.mediaDevices.getUserMediaOnFailure', makeEvent$1(err.name));\n return Promise.reject(err);\n });\n };\n navigator.mediaDevices.getUserMedia = gum.bind(navigator.mediaDevices);\n }\n if (navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia) {\n var origGetDisplayMedia_1 = navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);\n var gdm = function gdm() {\n trace('onnavigator.mediaDevices.getDisplayMedia', makeEvent$1(JSON.stringify(arguments[0])));\n return origGetDisplayMedia_1.apply(navigator.mediaDevices, arguments).then(function (stream) {\n trace('onnavigator.mediaDevices.getDisplayMediaOnSuccess', makeEvent$1(JSON.stringify(dumpStream$1(stream))));\n return stream;\n }, function (err) {\n trace('onnavigator.mediaDevices.getDisplayMediaOnFailure', makeEvent$1(err.name));\n return Promise.reject(err);\n });\n };\n navigator.mediaDevices.getDisplayMedia = gdm.bind(navigator.mediaDevices);\n }\n var getStatsReport = function getStatsReport() {\n return __awaiter$3(void 0, void 0, void 0, function () {\n return __generator$1(this, function (_a) {\n return [2 /*return*/, pc.getStats(null).then(function (res) {\n // Convert from stats report to js Map in order to have values set in `statsPreProcessor`\n var statsMap = new Map();\n res.forEach(function (stats, key) {\n return statsMap.set(key, stats);\n });\n return statsPreProcessor(statsMap).then(function () {\n var now = map2obj$1(statsMap);\n var base = deepCopy$2(now); // our new prev\n var compressed = deltaCompression$1(prev, now);\n trace('stats-report', formatStatsReport$1(compressed), compressed.timestamp !== -Infinity ? compressed.timestamp : undefined);\n prev = base;\n return Promise.resolve();\n });\n })];\n });\n });\n };\n var interval = window.setInterval(function () {\n if (pc.signalingState === 'closed') {\n window.clearInterval(interval);\n return;\n }\n getStatsReport();\n }, intervalTime);\n var forceStatsReport = function forceStatsReport() {\n return __awaiter$3(void 0, void 0, void 0, function () {\n return __generator$1(this, function (_a) {\n return [2 /*return*/, getStatsReport()];\n });\n });\n };\n return {\n forceStatsReport: forceStatsReport\n };\n};\nrtcStats_1$1 = rtcstats$1.rtcStats = rtcStats$1;\n\nvar global$1 = (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n\n// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global$1.setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n}\nif (typeof global$1.clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue$2 = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue$2 = currentQueue.concat(queue$2);\n } else {\n queueIndex = -1;\n }\n if (queue$2.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue$2.length;\n while(len) {\n currentQueue = queue$2;\n queue$2 = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue$2.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nfunction nextTick(fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue$2.push(new Item(fun, args));\n if (queue$2.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nvar title = 'browser';\nvar platform = 'browser';\nvar browser = true;\nvar env = {};\nvar argv = [];\nvar version = ''; // empty string to avoid regexp issues\nvar versions = {};\nvar release = {};\nvar config = {};\n\nfunction noop() {}\n\nvar on = noop;\nvar addListener = noop;\nvar once$4 = noop;\nvar off = noop;\nvar removeListener = noop;\nvar removeAllListeners = noop;\nvar emit = noop;\n\nfunction binding(name) {\n throw new Error('process.binding is not supported');\n}\n\nfunction cwd () { return '/' }\nfunction chdir (dir) {\n throw new Error('process.chdir is not supported');\n}function umask() { return 0; }\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance$1 = global$1.performance || {};\nvar performanceNow =\n performance$1.now ||\n performance$1.mozNow ||\n performance$1.msNow ||\n performance$1.oNow ||\n performance$1.webkitNow ||\n function(){ return (new Date()).getTime() };\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nfunction hrtime(previousTimestamp){\n var clocktime = performanceNow.call(performance$1)*1e-3;\n var seconds = Math.floor(clocktime);\n var nanoseconds = Math.floor((clocktime%1)*1e9);\n if (previousTimestamp) {\n seconds = seconds - previousTimestamp[0];\n nanoseconds = nanoseconds - previousTimestamp[1];\n if (nanoseconds<0) {\n seconds--;\n nanoseconds += 1e9;\n }\n }\n return [seconds,nanoseconds]\n}\n\nvar startTime = new Date();\nfunction uptime() {\n var currentTime = new Date();\n var dif = currentTime - startTime;\n return dif / 1000;\n}\n\nvar browser$1 = {\n nextTick: nextTick,\n title: title,\n browser: browser,\n env: env,\n argv: argv,\n version: version,\n versions: versions,\n on: on,\n addListener: addListener,\n once: once$4,\n off: off,\n removeListener: removeListener,\n removeAllListeners: removeAllListeners,\n emit: emit,\n binding: binding,\n cwd: cwd,\n chdir: chdir,\n umask: umask,\n hrtime: hrtime,\n platform: platform,\n release: release,\n config: config,\n uptime: uptime\n};\n\nfunction _mergeNamespaces$1(n,m){m.forEach(function(e){e&&typeof e!=='string'&&!Array.isArray(e)&&Object.keys(e).forEach(function(k){if(k!=='default'&&!(k in n)){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function get(){return e[k];}});}});});return Object.freeze(n);}/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */function __awaiter$2(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value);});}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value));}catch(e){reject(e);}}function rejected(value){try{step(generator[\"throw\"](value));}catch(e){reject(e);}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected);}step((generator=generator.apply(thisArg,_arguments||[])).next());});}var commonjsGlobal$1$1=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};var logger$1$1={exports:{}};/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */(function(module){(function(global){// Top level module for the global, static logger instance.\nvar Logger={};// For those that are at home that are keeping score.\nLogger.VERSION=\"1.6.1\";// Function which handles all incoming log messages.\nvar logHandler;// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\nvar contextualLoggersByNameMap={};// Polyfill for ES5's Function.bind.\nvar bind=function bind(scope,func){return function(){return func.apply(scope,arguments);};};// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\nvar merge=function merge(){var args=arguments,target=args[0],key,i;for(i=1;i=filterLevel.value;},trace:function trace(){this.invoke(Logger.TRACE,arguments);},debug:function debug(){this.invoke(Logger.DEBUG,arguments);},info:function info(){this.invoke(Logger.INFO,arguments);},warn:function warn(){this.invoke(Logger.WARN,arguments);},error:function error(){this.invoke(Logger.ERROR,arguments);},time:function time(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'start']);}},timeEnd:function timeEnd(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'end']);}},// Invokes the logger callback if it's not being filtered.\ninvoke:function invoke(level,msgArgs){if(logHandler&&this.enabledFor(level)){logHandler(msgArgs,merge({level:level},this.context));}}};// Protected instance which all calls to the to level `Logger` module will be routed through.\nvar globalLogger=new ContextualLogger({filterLevel:Logger.OFF});// Configure the global Logger instance.\n(function(){// Shortcut for optimisers.\nvar L=Logger;L.enabledFor=bind(globalLogger,globalLogger.enabledFor);L.trace=bind(globalLogger,globalLogger.trace);L.debug=bind(globalLogger,globalLogger.debug);L.time=bind(globalLogger,globalLogger.time);L.timeEnd=bind(globalLogger,globalLogger.timeEnd);L.info=bind(globalLogger,globalLogger.info);L.warn=bind(globalLogger,globalLogger.warn);L.error=bind(globalLogger,globalLogger.error);// Don't forget the convenience alias!\nL.log=L.info;})();// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\n// object with the supplied log messages and the second being a context object which contains a hash of stateful\n// parameters which the logging function can consume.\nLogger.setHandler=function(func){logHandler=func;};// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\n// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\nLogger.setLevel=function(level){// Set the globalLogger's level.\nglobalLogger.setLevel(level);// Apply this level to all registered contextual loggers.\nfor(var key in contextualLoggersByNameMap){if(contextualLoggersByNameMap.hasOwnProperty(key)){contextualLoggersByNameMap[key].setLevel(level);}}};// Gets the global logging filter level\nLogger.getLevel=function(){return globalLogger.getLevel();};// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\n// default context and log handler.\nLogger.get=function(name){// All logger instances are cached so they can be configured ahead of use.\nreturn contextualLoggersByNameMap[name]||(contextualLoggersByNameMap[name]=new ContextualLogger(merge({name:name},globalLogger.context)));};// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\n// write to the window's console object (if present); the optional options object can be used to customise the\n// formatter used to format each log message.\nLogger.createDefaultHandler=function(options){options=options||{};options.formatter=options.formatter||function defaultMessageFormatter(messages,context){// Prepend the logger's name to the log message for easy identification.\nif(context.name){messages.unshift(\"[\"+context.name+\"]\");}};// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\n// that don't offer a native console method.\nvar timerStartTimeByLabelMap={};// Support for IE8+ (and other, slightly more sane environments)\nvar invokeConsoleMethod=function invokeConsoleMethod(hdlr,messages){Function.prototype.apply.call(hdlr,console,messages);};// Check for the presence of a logger.\nif(typeof console===\"undefined\"){return function(){/* no console */};}return function(messages,context){// Convert arguments object to Array.\nmessages=Array.prototype.slice.call(messages);var hdlr=console.log;var timerLabel;if(context.level===Logger.TIME){timerLabel=(context.name?'['+context.name+'] ':'')+messages[0];if(messages[1]==='start'){if(console.time){console.time(timerLabel);}else {timerStartTimeByLabelMap[timerLabel]=new Date().getTime();}}else {if(console.timeEnd){console.timeEnd(timerLabel);}else {invokeConsoleMethod(hdlr,[timerLabel+': '+(new Date().getTime()-timerStartTimeByLabelMap[timerLabel])+'ms']);}}}else {// Delegate through to custom warn/error loggers if present on the console.\nif(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context.level===Logger.ERROR&&console.error){hdlr=console.error;}else if(context.level===Logger.INFO&&console.info){hdlr=console.info;}else if(context.level===Logger.DEBUG&&console.debug){hdlr=console.debug;}else if(context.level===Logger.TRACE&&console.trace){hdlr=console.trace;}options.formatter(messages,context);invokeConsoleMethod(hdlr,messages);}};};// Configure and example a Default implementation which writes to the `window.console` (if present). The\n// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\nLogger.useDefaults=function(options){Logger.setLevel(options&&options.defaultLevel||Logger.DEBUG);Logger.setHandler(Logger.createDefaultHandler(options));};// Createa an alias to useDefaults to avoid reaking a react-hooks rule.\nLogger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.\nif(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$1$1);})(logger$1$1);var Logger$2=logger$1$1.exports;var DEFAULT_LOGGER_NAME$1='webrtc-core';var logger$3=Logger$2.get(DEFAULT_LOGGER_NAME$1);Logger$2.useDefaults({defaultLevel:Logger$2.DEBUG,/* eslint-disable-next-line jsdoc/require-jsdoc */formatter:(messages,context)=>{messages.unshift(\"[\".concat(context.name,\"]\"));}});var DeviceKind$1;(function(DeviceKind){DeviceKind[\"AudioInput\"]=\"audioinput\";DeviceKind[\"AudioOutput\"]=\"audiooutput\";DeviceKind[\"VideoInput\"]=\"videoinput\";})(DeviceKind$1||(DeviceKind$1={}));/**\n * Prompts the user for permission to use a media input which produces a MediaStream with tracks\n * containing the requested types of media.\n *\n * @param constraints - A MediaStreamConstraints object specifying the types of media to request,\n * along with any requirements for each type.\n * @returns A Promise whose fulfillment handler receives a MediaStream object when the requested\n * media has successfully been obtained.\n */function getUserMedia(constraints){return __awaiter$2(this,void 0,void 0,function*(){return navigator.mediaDevices.getUserMedia(constraints);});}/**\n * Prompts the user for permission to use a user's display media and audio. If a video track is\n * absent from the constraints argument, one will still be provided. Includes experimental options\n * found in https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia#options.\n *\n * @param constraints - A MediaStreamConstraints object specifying the types of media to request,\n * along with any requirements for each type, as well as experimental options.\n * @returns A Promise whose fulfillment handler receives a MediaStream object when the requested\n * media has successfully been obtained.\n */function getDisplayMedia(constraints){return navigator.mediaDevices.getDisplayMedia(constraints);}/**\n * Requests a list of the available media input and output devices, such as microphones, cameras,\n * headsets, and so forth.\n *\n * @returns A Promise that receives an array of MediaDeviceInfo objects when the promise is\n * fulfilled.\n */function enumerateDevices(){return __awaiter$2(this,void 0,void 0,function*(){return navigator.mediaDevices.enumerateDevices();});}/**\n * Adds the callback handler to be notified of a media device change (for example, a headset is\n * unplugged from the user's computer).\n *\n * @param handler - The callback function to execute.\n */function setOnDeviceChangeHandler$1(handler){navigator.mediaDevices.ondevicechange=handler;}/**\n * Checks permissions using the navigator's permissions api.\n *\n * @param deviceKinds - Array of DeviceKind items.\n * @throws An error if camera or microphone aren't available options for query() (Firefox), or if\n * navigator.permissions is undefined (Safari and others).\n * @returns Array of Permission Status objects.\n */function checkNavigatorPermissions(deviceKinds){return __awaiter$2(this,void 0,void 0,function*(){var permissionRequests=[];if(deviceKinds.includes(DeviceKind$1.VideoInput)){permissionRequests.push(navigator.permissions.query({name:'camera'}));}if(deviceKinds.includes(DeviceKind$1.AudioInput)){permissionRequests.push(navigator.permissions.query({name:'microphone'}));}return Promise.all(permissionRequests);});}/**\n * Check to see if the user has granted the application permission to use their devices.\n *\n * @param deviceKinds - Array of DeviceKind items.\n * @returns True if device permissions exist, false if otherwise.\n */function checkDevicePermissions(deviceKinds){return __awaiter$2(this,void 0,void 0,function*(){try{var permissions=yield checkNavigatorPermissions(deviceKinds);if(permissions.every(permission=>permission.state==='granted')){return true;}// eslint-disable-next-line no-empty\n}catch(e){}try{var devices=yield enumerateDevices();// If permissions are granted, the MediaDeviceInfo objects will have labels.\nreturn devices.filter(device=>deviceKinds.includes(device.kind)).every(device=>device.label);// eslint-disable-next-line no-empty\n}catch(e){}return false;});}/**\n * Ensures that the user has granted permissions to the microphone and camera.\n *\n * @param deviceKinds - Array of DeviceKind items.\n * @param callback - Function that will be executed while device permissions are granted. After this\n * returns, permissions (for example device labels in Firefox) may not be available anymore.\n * @returns The callback's response.\n */function ensureDevicePermissions(deviceKinds,callback){return __awaiter$2(this,void 0,void 0,function*(){try{var hasDevicePermissions=yield checkDevicePermissions(deviceKinds);if(!hasDevicePermissions){var stream=yield getUserMedia({audio:deviceKinds.includes(DeviceKind$1.AudioInput),video:deviceKinds.includes(DeviceKind$1.VideoInput)});// Callback is here to call a function while an active capture exists, so that the browser\n// (Firefox) will allow the user to access device information.\nvar callbackRes=yield callback();// Stop tracks in the stream so the browser (Safari) will know that there is not an active\n// stream running.\nstream.getTracks().forEach(track=>track.stop());return callbackRes;}return callback();}catch(e){logger$3.error(e);throw new Error('Failed to ensure device permissions.');}});}var media=/*#__PURE__*/Object.freeze({__proto__:null,get DeviceKind(){return DeviceKind$1;},getUserMedia:getUserMedia,getDisplayMedia:getDisplayMedia,enumerateDevices:enumerateDevices,setOnDeviceChangeHandler:setOnDeviceChangeHandler$1,checkDevicePermissions:checkDevicePermissions,ensureDevicePermissions:ensureDevicePermissions});var WebrtcCoreErrorType;(function(WebrtcCoreErrorType){WebrtcCoreErrorType[\"DEVICE_PERMISSION_DENIED\"]=\"DEVICE_PERMISSION_DENIED\";WebrtcCoreErrorType[\"CREATE_STREAM_FAILED\"]=\"CREATE_STREAM_FAILED\";WebrtcCoreErrorType[\"ADD_EFFECT_FAILED\"]=\"ADD_EFFECT_FAILED\";})(WebrtcCoreErrorType||(WebrtcCoreErrorType={}));/**\n * Represents a WebRTC core error, which contains error type and error message.\n */class WebrtcCoreError{/**\n * Creates new error.\n *\n * @param type - Error type.\n * @param message - Error message.\n */constructor(type){var message=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'';this.type=type;this.message=message;}}/**\n * Creates a camera stream. Please note that the constraint params in second getUserMedia call would NOT take effect when:\n *\n * 1. Previous captured video stream from the same device is not stopped.\n * 2. Previous createCameraStream() call for the same device is in progress.\n *\n * @param cameraStreamConstructor - Constructor for the local camera stream.\n * @param constraints - Video device constraints.\n * @returns A LocalCameraStream object or an error.\n */function createCameraStream(cameraStreamConstructor,constraints){return __awaiter$2(this,void 0,void 0,function*(){var stream;try{stream=yield getUserMedia({video:Object.assign({},constraints)});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,\"Failed to create camera stream: \".concat(error));}// eslint-disable-next-line new-cap\nreturn new cameraStreamConstructor(stream);});}/**\n * Creates a LocalMicrophoneStream with the given constraints.\n *\n * @param microphoneStreamConstructor - Constructor for the local microphone stream.\n * @param constraints - Audio device constraints.\n * @returns A LocalMicrophoneStream object or an error.\n */function createMicrophoneStream(microphoneStreamConstructor,constraints){return __awaiter$2(this,void 0,void 0,function*(){var stream;try{stream=yield getUserMedia({audio:Object.assign({},constraints)});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,\"Failed to create microphone stream: \".concat(error));}// eslint-disable-next-line new-cap\nreturn new microphoneStreamConstructor(stream);});}/**\n * Creates a LocalCameraStream and a LocalMicrophoneStream with the given constraints.\n *\n * @param cameraStreamConstructor - Constructor for the local camera stream.\n * @param microphoneStreamConstructor - Constructor for the local microphone stream.\n * @param constraints - Object containing video and audio device constraints.\n * @param constraints.video - Video device constraints.\n * @param constraints.audio - Audio device constraints.\n * @returns A Promise that resolves to a LocalCameraStream and a LocalMicrophoneStream or an error.\n */function createCameraAndMicrophoneStreams(cameraStreamConstructor,microphoneStreamConstructor,constraints){return __awaiter$2(this,void 0,void 0,function*(){var stream;try{stream=yield getUserMedia({video:Object.assign({},constraints===null||constraints===void 0?void 0:constraints.video),audio:Object.assign({},constraints===null||constraints===void 0?void 0:constraints.audio)});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,\"Failed to create camera and microphone streams: \".concat(error));}// eslint-disable-next-line new-cap\nvar localCameraStream=new cameraStreamConstructor(new MediaStream(stream.getVideoTracks()));// eslint-disable-next-line new-cap\nvar localMicrophoneStream=new microphoneStreamConstructor(new MediaStream(stream.getAudioTracks()));return [localCameraStream,localMicrophoneStream];});}/**\n * Creates a LocalDisplayStream and a LocalSystemAudioStream with the given parameters.\n *\n * This is a more advanced version of createDisplayStreamWithAudio that allows the user to specify\n * additional display media options and constraints.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia#options.\n *\n * @param options - An object containing the options for creating the display and system audio streams.\n * @param options.video - An object containing the video stream options.\n * @param options.video.displayStreamConstructor - Constructor for the local display stream.\n * @param options.video.constraints - Video device constraints.\n * @param options.video.videoContentHint - A hint for the content of the stream.\n * @param options.video.preferCurrentTab - Whether to offer the current tab as the most prominent capture source.\n * @param options.video.selfBrowserSurface - Whether to allow the user to select the current tab for capture.\n * @param options.video.surfaceSwitching - Whether to allow the user to dynamically switch the shared tab during screen-sharing.\n * @param options.video.monitorTypeSurfaces - Whether to offer the user the option to choose display surfaces whose type is monitor.\n * @param options.audio - An object containing the audio stream options. If present, a system audio stream will be created.\n * @param options.audio.systemAudioStreamConstructor - Constructor for the local system audio stream.\n * @param options.audio.constraints - Audio device constraints.\n * @param options.audio.systemAudio - Whether to include the system audio among the possible audio sources offered to the user.\n * @param options.controller - CaptureController to further manipulate the capture session.\n * @returns A Promise that resolves to a LocalDisplayStream and a LocalSystemAudioStream or an\n * error. If no system audio is available, the LocalSystemAudioStream will be resolved as null\n * instead.\n */function createDisplayMedia(options){return __awaiter$2(this,void 0,void 0,function*(){var _a,_b;var stream;var videoConstraints=options.video.constraints||true;var audioConstraints=((_a=options.audio)===null||_a===void 0?void 0:_a.constraints)||!!options.audio;try{stream=yield getDisplayMedia({video:videoConstraints,audio:audioConstraints,controller:options.controller,preferCurrentTab:options.video.preferCurrentTab,selfBrowserSurface:options.video.selfBrowserSurface,surfaceSwitching:options.video.surfaceSwitching,systemAudio:(_b=options.audio)===null||_b===void 0?void 0:_b.systemAudio,monitorTypeSurfaces:options.video.monitorTypeSurfaces});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,\"Failed to create display and/or system audio streams: \".concat(error));}// eslint-disable-next-line new-cap\nvar localDisplayStream=new options.video.displayStreamConstructor(new MediaStream(stream.getVideoTracks()));if(options.video.videoContentHint){localDisplayStream.contentHint=options.video.videoContentHint;}var localSystemAudioStream=null;if(options.audio&&stream.getAudioTracks().length>0){// eslint-disable-next-line new-cap\nlocalSystemAudioStream=new options.audio.systemAudioStreamConstructor(new MediaStream(stream.getAudioTracks()));}return [localDisplayStream,localSystemAudioStream];});}/**\n * Creates a LocalDisplayStream with the given parameters.\n *\n * @param displayStreamConstructor - Constructor for the local display stream.\n * @param videoContentHint - An optional parameter to give a hint for the content of the stream.\n * @returns A Promise that resolves to a LocalDisplayStream or an error.\n */function createDisplayStream(displayStreamConstructor,videoContentHint){return __awaiter$2(this,void 0,void 0,function*(){var[localDisplayStream]=yield createDisplayMedia({video:{displayStreamConstructor,videoContentHint}});return localDisplayStream;});}/**\n * Creates a LocalDisplayStream and a LocalSystemAudioStream with the given parameters.\n *\n * @param displayStreamConstructor - Constructor for the local display stream.\n * @param systemAudioStreamConstructor - Constructor for the local system audio stream.\n * @param videoContentHint - An optional parameter to give a hint for the content of the stream.\n * @returns A Promise that resolves to a LocalDisplayStream and a LocalSystemAudioStream or an\n * error. If no system audio is available, the LocalSystemAudioStream will be resolved as null\n * instead.\n */function createDisplayStreamWithAudio(displayStreamConstructor,systemAudioStreamConstructor,videoContentHint){return __awaiter$2(this,void 0,void 0,function*(){return createDisplayMedia({video:{displayStreamConstructor,videoContentHint},audio:{systemAudioStreamConstructor}});});}/**\n * Enumerates the media input and output devices available.\n *\n * @param deviceKind - Optional filter to return a specific device kind.\n * @returns List of media devices in an array of MediaDeviceInfo objects.\n */function getDevices(deviceKind){return __awaiter$2(this,void 0,void 0,function*(){var devices;var deviceKinds=deviceKind?[deviceKind]:[DeviceKind$1.AudioInput,DeviceKind$1.VideoInput];try{devices=yield ensureDevicePermissions(deviceKinds,enumerateDevices);}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.DEVICE_PERMISSION_DENIED,'Failed to ensure device permissions');}return devices.filter(v=>deviceKind?v.kind===deviceKind:true);});}/**\n * Helper function to get a list of microphone devices.\n *\n * @returns List of microphone devices in an array of MediaDeviceInfo objects.\n */function getAudioInputDevices(){return __awaiter$2(this,void 0,void 0,function*(){return getDevices(DeviceKind$1.AudioInput);});}/**\n * Helper function to get a list of speaker devices.\n *\n * @returns List of speaker devices in an array of MediaDeviceInfo objects.\n */function getAudioOutputDevices(){return __awaiter$2(this,void 0,void 0,function*(){return getDevices(DeviceKind$1.AudioOutput);});}/**\n * Helper function to get a list of camera devices.\n *\n * @returns List of camera devices in an array of MediaDeviceInfo objects.\n */function getVideoInputDevices(){return __awaiter$2(this,void 0,void 0,function*(){return getDevices(DeviceKind$1.VideoInput);});}/**\n * Export the setOnDeviceChangeHandler method directly from the core lib.\n */var {setOnDeviceChangeHandler}=media;var events$1$1={exports:{}};var R$1$1=typeof Reflect==='object'?Reflect:null;var ReflectApply$1$1=R$1$1&&typeof R$1$1.apply==='function'?R$1$1.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys$1$1;if(R$1$1&&typeof R$1$1.ownKeys==='function'){ReflectOwnKeys$1$1=R$1$1.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys$1$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys$1$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning$1$1(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN$1$1=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$1$1(){EventEmitter$1$1.init.call(this);}events$1$1.exports=EventEmitter$1$1;events$1$1.exports.once=once$1$1;// Backwards-compat with node 0.10.x\nEventEmitter$1$1.EventEmitter=EventEmitter$1$1;EventEmitter$1$1.prototype._events=undefined;EventEmitter$1$1.prototype._eventsCount=0;EventEmitter$1$1.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners$1$1=10;function checkListener$1$1(listener){if(typeof listener!=='function'){throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$1$1,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners$1$1;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN$1$1(arg)){throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners$1$1=arg;}});EventEmitter$1$1.init=function(){if(this._events===undefined||this._events===Object.getPrototypeOf(this)._events){this._events=Object.create(null);this._eventsCount=0;}this._maxListeners=this._maxListeners||undefined;};// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter$1$1.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||NumberIsNaN$1$1(n)){throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+n+'.');}this._maxListeners=n;return this;};function _getMaxListeners$1$1(that){if(that._maxListeners===undefined)return EventEmitter$1$1.defaultMaxListeners;return that._maxListeners;}EventEmitter$1$1.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners$1$1(this);};EventEmitter$1$1.prototype.emit=function emit(type){var args=[];for(var i=1;i0)er=args[0];if(er instanceof Error){// Note: The comments on the `throw` lines are intentional, they show\n// up in Node's output if this results in an unhandled exception.\nthrow er;// Unhandled 'error' event\n}// At least give some kind of context to the user\nvar err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event\n}var handler=events[type];if(handler===undefined)return false;if(typeof handler==='function'){ReflectApply$1$1(handler,this,args);}else {var len=handler.length;var listeners=arrayClone$1$1(handler,len);for(var i=0;i0&&existing.length>m&&!existing.warned){existing.warned=true;// No error code for this since it is a Warning\n// eslint-disable-next-line no-restricted-syntax\nvar w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' '+String(type)+' listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;ProcessEmitWarning$1$1(w);}}return target;}EventEmitter$1$1.prototype.addListener=function addListener(type,listener){return _addListener$1$1(this,type,listener,false);};EventEmitter$1$1.prototype.on=EventEmitter$1$1.prototype.addListener;EventEmitter$1$1.prototype.prependListener=function prependListener(type,listener){return _addListener$1$1(this,type,listener,true);};function onceWrapper$1$1(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;if(arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments);}}function _onceWrap$1$1(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=onceWrapper$1$1.bind(state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter$1$1.prototype.once=function once(type,listener){checkListener$1$1(listener);this.on(type,_onceWrap$1$1(this,type,listener));return this;};EventEmitter$1$1.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener$1$1(listener);this.prependListener(type,_onceWrap$1$1(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter$1$1.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;checkListener$1$1(listener);events=this._events;if(events===undefined)return this;list=events[type];if(list===undefined)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=Object.create(null);else {delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else {spliceOne$1$1(list,position);}if(list.length===1)events[type]=list[0];if(events.removeListener!==undefined)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter$1$1.prototype.off=EventEmitter$1$1.prototype.removeListener;EventEmitter$1$1.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(events===undefined)return this;// not listening for removeListener, no need to emit\nif(events.removeListener===undefined){if(arguments.length===0){this._events=Object.create(null);this._eventsCount=0;}else if(events[type]!==undefined){if(--this._eventsCount===0)this._events=Object.create(null);else delete events[type];}return this;}// emit removeListener for all listeners on all events\nif(arguments.length===0){var keys=Object.keys(events);var key;for(i=0;i=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners$1$1(target,type,unwrap){var events=target._events;if(events===undefined)return [];var evlistener=events[type];if(evlistener===undefined)return [];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners$1$1(evlistener):arrayClone$1$1(evlistener,evlistener.length);}EventEmitter$1$1.prototype.listeners=function listeners(type){return _listeners$1$1(this,type,true);};EventEmitter$1$1.prototype.rawListeners=function rawListeners(type){return _listeners$1$1(this,type,false);};EventEmitter$1$1.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else {return listenerCount$1$1.call(emitter,type);}};EventEmitter$1$1.prototype.listenerCount=listenerCount$1$1;function listenerCount$1$1(type){var events=this._events;if(events!==undefined){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener!==undefined){return evlistener.length;}}return 0;}EventEmitter$1$1.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys$1$1(this._events):[];};function arrayClone$1$1(arr,n){var copy=new Array(n);for(var i=0;ie.id===effect.id)){return;}// Load the effect. Because loading is asynchronous, keep track of the loading effects.\nthis.loadingEffects.set(effect.kind,effect);yield effect.load(this.outputTrack);// After loading, check whether or not we still want to use this effect. If another effect of\n// the same kind was added while this effect was loading, we only want to use the latest effect,\n// so dispose this one. If the effects list was cleared while this effect was loading, also\n// dispose it.\nif(effect!==this.loadingEffects.get(effect.kind)){yield effect.dispose();throw new WebrtcCoreError(WebrtcCoreErrorType.ADD_EFFECT_FAILED,\"Another effect with kind \".concat(effect.kind,\" was added while effect \").concat(effect.id,\" was loading, or the effects list was cleared.\"));}this.loadingEffects.delete(effect.kind);/**\n * Handle when the effect's output track has been changed. This will update the input of the\n * next effect in the effects list of the output of the stream.\n *\n * @param track - The new output track of the effect.\n */var handleEffectTrackUpdated=track=>{var _f;var effectIndex=this.effects.findIndex(e=>e.id===effect.id);if(effectIndex===this.effects.length-1){this.changeOutputTrack(track);}else if(effectIndex>=0){(_f=this.effects[effectIndex+1])===null||_f===void 0?void 0:_f.replaceInputTrack(track);}else {logger$3.error(\"Effect with ID \".concat(effect.id,\" not found in effects list.\"));}};/**\n * Handle when the effect has been disposed. This will remove all event listeners from the\n * effect.\n */var handleEffectDisposed=()=>{effect.off('track-updated',handleEffectTrackUpdated);effect.off('disposed',handleEffectDisposed);};// TODO: using EffectEvent.TrackUpdated or EffectEvent.Disposed will cause the entire\n// web-media-effects lib to be rebuilt and inflates the size of the webrtc-core build, so\n// we use type assertion here as a temporary workaround.\neffect.on('track-updated',handleEffectTrackUpdated);effect.on('disposed',handleEffectDisposed);// Add the effect to the effects list. If an effect of the same kind has already been added,\n// dispose the existing effect and replace it with the new effect. If the existing effect was\n// enabled, also enable the new effect.\nvar existingEffectIndex=this.effects.findIndex(e=>e.kind===effect.kind);if(existingEffectIndex>=0){var[existingEffect]=this.effects.splice(existingEffectIndex,1,effect);if(existingEffect.isEnabled){// If the existing effect is not the first effect in the effects list, then the input of the\n// new effect should be the output of the previous effect in the effects list. We know the\n// output track of the previous effect must exist because it must have been loaded (and all\n// loaded effects have an output track).\nvar inputTrack=existingEffectIndex===0?this.inputTrack:this.effects[existingEffectIndex-1].getOutputTrack();yield effect.replaceInputTrack(inputTrack);// Enabling the new effect will trigger the track-updated event, which will handle the new\n// effect's updated output track.\nyield effect.enable();}yield existingEffect.dispose();}else {this.effects.push(effect);}// Emit an event with the effect so others can listen to the effect events.\nthis[LocalStreamEventNames.EffectAdded].emit(effect);});}/**\n * Get an effect from the effects list by ID.\n *\n * @param id - The id of the effect you want to get.\n * @returns The effect or undefined.\n */getEffectById(id){return this.effects.find(effect=>effect.id===id);}/**\n * Get an effect from the effects list by kind.\n *\n * @param kind - The kind of the effect you want to get.\n * @returns The effect or undefined.\n */getEffectByKind(kind){return this.effects.find(effect=>effect.kind===kind);}/**\n * Get all the effects from the effects list.\n *\n * @returns A list of effects.\n */getEffects(){return this.effects;}/**\n * Method to serialize data about input, output streams\n * and also effects from LocalStream.\n *\n * @returns - A JSON-compatible object representation with data from LocalStream.\n */toJSON(){return {muted:this.muted,label:this.label,readyState:this.readyState,inputStream:{active:this.inputStream.active,id:this.inputStream.id,enabled:this.inputTrack.enabled,muted:this.inputTrack.muted},outputStream:{active:this.outputStream.active,id:this.outputStream.id},effects:this.effects.map(effect=>{return {id:effect.id,kind:effect.kind,isEnabled:effect.isEnabled};})};}/**\n * Cleanup the local effects.\n */disposeEffects(){return __awaiter$2(this,void 0,void 0,function*(){this.loadingEffects.clear();// Dispose of any effects currently in use\nif(this.effects.length>0){this.changeOutputTrack(this.inputTrack);yield Promise.all(this.effects.map(effect=>effect.dispose()));this.effects=[];}});}}_a$1$1=LocalStreamEventNames.UserMuteStateChange,_b=LocalStreamEventNames.SystemMuteStateChange,_c=LocalStreamEventNames.ConstraintsChange,_d=LocalStreamEventNames.OutputTrackChange,_e=LocalStreamEventNames.EffectAdded;var LocalStream=AddEvents(_LocalStream);/**\n * An audio LocalStream.\n */class LocalAudioStream extends LocalStream{/**\n * Apply constraints to the stream.\n *\n * @param constraints - The constraints to apply.\n * @returns A promise which resolves when the constraints have been successfully applied.\n */applyConstraints(constraints){return __awaiter$2(this,void 0,void 0,function*(){logger$3.log(\"Applying constraints to local track:\",constraints);return this.inputTrack.applyConstraints(constraints).then(()=>{this[LocalStreamEventNames.ConstraintsChange].emit();});});}}/**\n * A video LocalStream.\n */class LocalVideoStream extends LocalStream{/**\n * Apply constraints to the stream.\n *\n * @param constraints - The constraints to apply.\n * @returns A promise which resolves when the constraints have been successfully applied.\n */applyConstraints(constraints){return __awaiter$2(this,void 0,void 0,function*(){logger$3.log(\"Applying constraints to local track:\",constraints);return this.inputTrack.applyConstraints(constraints).then(()=>{this[LocalStreamEventNames.ConstraintsChange].emit();});});}/**\n * Get the content hint for this stream.\n *\n * @returns The content hint setting for this stream, or undefined if none has been set.\n */get contentHint(){return this.inputTrack.contentHint;}/**\n * Set the content hint for this stream.\n *\n * @param hint - The content hint to set.\n */set contentHint(hint){this.inputTrack.contentHint=hint;}/**\n * Check the resolution and then return how many layers will be active.\n *\n * @returns The active layers count.\n */getNumActiveSimulcastLayers(){var activeSimulcastLayersNumber=0;var videoHeight=this.inputTrack.getSettings().height;if(videoHeight<=180){activeSimulcastLayersNumber=1;}else if(videoHeight<=360){activeSimulcastLayersNumber=2;}else {activeSimulcastLayersNumber=3;}return activeSimulcastLayersNumber;}}/**\n * A local camera stream.\n */class LocalCameraStream extends LocalVideoStream{}/**\n * A local display stream.\n */class LocalDisplayStream extends LocalVideoStream{}/**\n * A local microphone stream.\n */class LocalMicrophoneStream extends LocalAudioStream{}/**\n * A local system audio stream.\n */class LocalSystemAudioStream extends LocalAudioStream{}var _a$6$1;var RemoteMediaState;(function(RemoteMediaState){RemoteMediaState[\"Started\"]=\"started\";RemoteMediaState[\"Stopped\"]=\"stopped\";})(RemoteMediaState||(RemoteMediaState={}));var RemoteStreamEventNames;(function(RemoteStreamEventNames){RemoteStreamEventNames[\"MediaStateChange\"]=\"media-state-change\";})(RemoteStreamEventNames||(RemoteStreamEventNames={}));/**\n * A stream originating from a remote peer.\n */class _RemoteStream extends Stream{/**\n * Create a RemoteStream from the given values.\n *\n * @param stream - The initial output MediaStream for this Stream.\n */constructor(stream){super(stream);this[_a$6$1]=new TypedEvent$1();this.handleMediaStarted=this.handleMediaStarted.bind(this);this.handleMediaStopped=this.handleMediaStopped.bind(this);this.outputTrack.addEventListener('mute',this.handleMediaStopped);this.outputTrack.addEventListener('unmute',this.handleMediaStarted);}/**\n * @inheritdoc\n */handleMediaStarted(){this[RemoteStreamEventNames.MediaStateChange].emit(RemoteMediaState.Started);}/**\n * @inheritdoc\n */handleMediaStopped(){this[RemoteStreamEventNames.MediaStateChange].emit(RemoteMediaState.Stopped);}/**\n * Helper function to add event handlers to a MediaStreamTrack. See\n * {@link Stream.addTrackHandlersForStreamEvents} for why this is useful.\n *\n * @param track - The MediaStreamTrack.\n */addTrackHandlersForRemoteStreamEvents(track){track.addEventListener('mute',this.handleMediaStopped);track.addEventListener('unmute',this.handleMediaStarted);}/**\n * @inheritdoc\n */addTrackHandlers(track){super.addTrackHandlers(track);this.addTrackHandlersForRemoteStreamEvents(track);}/**\n * @inheritdoc\n */removeTrackHandlers(track){super.removeTrackHandlers(track);track.removeEventListener('mute',this.handleMediaStopped);track.removeEventListener('unmute',this.handleMediaStarted);}/**\n * Get whether the media on this stream has started or stopped.\n *\n * @returns The state of the media.\n */get mediaState(){return this.outputTrack.muted?RemoteMediaState.Stopped:RemoteMediaState.Started;}/**\n * @inheritdoc\n */getSettings(){return this.outputTrack.getSettings();}/**\n * Replace the existing track on the output stream for a new track.\n *\n * @param newTrack - The track to add to the stream.\n */replaceTrack(newTrack){var oldTrack=this.outputTrack;this.removeTrackHandlers(oldTrack);this.outputStream.removeTrack(oldTrack);this.outputStream.addTrack(newTrack);this.addTrackHandlers(newTrack);if(oldTrack.muted!==newTrack.muted){if(newTrack.muted){this.handleMediaStopped();}else {this.handleMediaStarted();}}// TODO: Chrome/React may not automatically refresh the media element with the new track when\n// the output track has changed, so we may need to emit an event here if this is the case.\n// this[StreamEventNames.OutputTrackChange].emit(newTrack);\n}/**\n * @inheritdoc\n */stop(){this.outputTrack.stop();// calling stop() will not automatically emit Ended, so we emit it here\nthis[StreamEventNames.Ended].emit();}}_a$6$1=RemoteStreamEventNames.MediaStateChange;var RemoteStream=AddEvents(_RemoteStream);var commonjsGlobal$3=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};function getDefaultExportFromCjs$1(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;}var es5$1={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal$3,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,\"a\",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p=\"\",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||\"\";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||\"\";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case\"NT\":return \"NT\";case\"XP\":return \"XP\";case\"NT 5.0\":return \"2000\";case\"NT 5.1\":return \"XP\";case\"NT 5.2\":return \"2003\";case\"NT 6.0\":return \"Vista\";case\"NT 6.1\":return \"7\";case\"NT 6.2\":return \"8\";case\"NT 6.3\":return \"8.1\";case\"NT 10.0\":return \"10\";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(\".\").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return \"Leopard\";case 6:return \"Snow Leopard\";case 7:return \"Lion\";case 8:return \"Mountain Lion\";case 9:return \"Mavericks\";case 10:return \"Yosemite\";case 11:return \"El Capitan\";case 12:return \"Sierra\";case 13:return \"High Sierra\";case 14:return \"Mojave\";case 15:return \"Catalina\";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(\".\").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?\"Cupcake\":1===t[0]&&t[1]>=6?\"Donut\":2===t[0]&&t[1]<2?\"Eclair\":2===t[0]&&2===t[1]?\"Froyo\":2===t[0]&&t[1]>2?\"Gingerbread\":3===t[0]?\"Honeycomb\":4===t[0]&&t[1]<1?\"Ice Cream Sandwich\":4===t[0]&&t[1]<4?\"Jelly Bean\":4===t[0]&&t[1]>=4?\"KitKat\":5===t[0]?\"Lollipop\":6===t[0]?\"Marshmallow\":7===t[0]?\"Nougat\":8===t[0]?\"Oreo\":9===t[0]?\"Pie\":void 0;},e.getVersionPrecision=function(e){return e.split(\".\").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(\".0\");return e.map(n.split(\".\"),function(e){return new Array(20-e.length).join(\"0\")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]1?i-1:0),a=1;a0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if(\"string\"==typeof i)return \">\"===e[0]||\"<\"===e[0]?(r=e.substr(1),\"=\"===e[1]?(n=!0,r=e.substr(2)):t=[],\">\"===e[0]?t.push(1):t.push(-1)):\"=\"===e[0]?r=e.substr(1):\"~\"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\\/(\\d+(\\.?_?\\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:\"Googlebot\"},r=i.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\\/|opios/i],describe:function describe(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:\"Samsung Internet for Android\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:\"NAVER Whale Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:\"MZ Browser\"},r=i.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:\"Focus\"},r=i.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:\"Swing\"},r=i.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:\"Opera Coast\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\\/\\d+(?:.?_?\\d+)+/i],describe:function describe(e){var t={name:\"Opera Touch\"},r=i.default.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:\"Yandex Browser\"},r=i.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:\"UC Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:\"Maxthon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:\"Epiphany\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:\"Puffin\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:\"Sleipnir\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:\"K-Meleon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:\"WeChat\"},r=i.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?\"QQ Browser Lite\":\"QQ Browser\"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:\"Internet Explorer\"},r=i.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\\sedg\\//i],describe:function describe(e){var t={name:\"Microsoft Edge\"},r=i.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:\"Microsoft Edge\"},r=i.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:\"Vivaldi\"},r=i.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:\"SeaMonkey\"},r=i.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:\"Sailfish\"},r=i.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:\"Amazon Silk\"},r=i.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:\"PhantomJS\"},r=i.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:\"SlimerJS\"},r=i.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function describe(e){var t={name:\"BlackBerry\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:\"WebOS Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:\"Bada\"},r=i.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:\"Tizen\"},r=i.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:\"QupZilla\"},r=i.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:\"Firefox\"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:\"Electron\"},r=i.default.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:\"Miui\"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:\"Chromium\"},r=i.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:\"Chrome\"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:\"Google Search\"},r=i.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:\"Android Browser\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:\"PlayStation 4\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:\"Safari\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,\".\"),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,\".\");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||i.default.getFirstMatch(/\\bbb(\\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:\"bot\",vendor:\"Google\"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&\"Nova\",r={type:s.PLATFORMS_MAP.mobile,vendor:\"Huawei\"};return t&&(r.model=t),r;}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Nexus\"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\",model:\"Kindle Fire HD 7\"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:\"Apple\",model:t};}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:\"Nexus\"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return \"blackberry\"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:\"BlackBerry\"};}},{test:function test(e){return \"bada\"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return \"windows phone\"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:\"Microsoft\"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(\".\")[0]);return \"android\"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return \"android\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return \"macos\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:\"Apple\"};}},{test:function test(e){return \"windows\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return \"linux\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return \"playstation 4\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return \"roku\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return \"microsoft edge\"===e.getBrowserName(!0);},describe:function describe(e){if(/\\sedg\\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\\/537\\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5$1);var Bowser$1=/*@__PURE__*/getDefaultExportFromCjs$1(es5$1.exports);var BrowserName$1;(function(BrowserName){BrowserName[\"CHROME\"]=\"Chrome\";BrowserName[\"FIREFOX\"]=\"Firefox\";BrowserName[\"EDGE\"]=\"Microsoft Edge\";BrowserName[\"SAFARI\"]=\"Safari\";})(BrowserName$1||(BrowserName$1={}));class BrowserInfo$1{static getBrowserDetails(){return this.browser.getBrowser();}static getOSDetails(){return this.browser.getOS();}static getPlatformDetails(){return this.browser.getPlatform();}static getEngineDetails(){return this.browser.getEngine();}static isChrome(){return this.browser.getBrowserName()===BrowserName$1.CHROME;}static isFirefox(){return this.browser.getBrowserName()===BrowserName$1.FIREFOX;}static isEdge(){return this.browser.getBrowserName()===BrowserName$1.EDGE;}static isSafari(){return this.browser.getBrowserName()===BrowserName$1.SAFARI;}static isVersionGreaterThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\">\".concat(version)};return this.browser.satisfies(checkTree);}static isVersionGreaterThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\">=\".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\"<\".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\"<=\".concat(version)};return this.browser.satisfies(checkTree);}static isSubVersionOf(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\"~\".concat(version)};return this.browser.satisfies(checkTree);}}BrowserInfo$1.browser=Bowser$1.getParser(window.navigator.userAgent);var CapabilityState$1;(function(CapabilityState){CapabilityState[\"NOT_CAPABLE\"]=\"not capable\";CapabilityState[\"CAPABLE\"]=\"capable\";CapabilityState[\"UNKNOWN\"]=\"unknown\";})(CapabilityState$1||(CapabilityState$1={}));var events$2={exports:{}};var R$2=typeof Reflect==='object'?Reflect:null;var ReflectApply$2=R$2&&typeof R$2.apply==='function'?R$2.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys$2;if(R$2&&typeof R$2.ownKeys==='function'){ReflectOwnKeys$2=R$2.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys$2=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys$2=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning$2(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN$2=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$1$2(){EventEmitter$1$2.init.call(this);}events$2.exports=EventEmitter$1$2;events$2.exports.once=once$3;// Backwards-compat with node 0.10.x\nEventEmitter$1$2.EventEmitter=EventEmitter$1$2;EventEmitter$1$2.prototype._events=undefined;EventEmitter$1$2.prototype._eventsCount=0;EventEmitter$1$2.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners$2=10;function checkListener$2(listener){if(typeof listener!=='function'){throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$1$2,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners$2;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN$2(arg)){throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners$2=arg;}});EventEmitter$1$2.init=function(){if(this._events===undefined||this._events===Object.getPrototypeOf(this)._events){this._events=Object.create(null);this._eventsCount=0;}this._maxListeners=this._maxListeners||undefined;};// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter$1$2.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||NumberIsNaN$2(n)){throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+n+'.');}this._maxListeners=n;return this;};function _getMaxListeners$2(that){if(that._maxListeners===undefined)return EventEmitter$1$2.defaultMaxListeners;return that._maxListeners;}EventEmitter$1$2.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners$2(this);};EventEmitter$1$2.prototype.emit=function emit(type){var args=[];for(var i=1;i0)er=args[0];if(er instanceof Error){// Note: The comments on the `throw` lines are intentional, they show\n// up in Node's output if this results in an unhandled exception.\nthrow er;// Unhandled 'error' event\n}// At least give some kind of context to the user\nvar err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event\n}var handler=events[type];if(handler===undefined)return false;if(typeof handler==='function'){ReflectApply$2(handler,this,args);}else {var len=handler.length;var listeners=arrayClone$2(handler,len);for(var i=0;i0&&existing.length>m&&!existing.warned){existing.warned=true;// No error code for this since it is a Warning\n// eslint-disable-next-line no-restricted-syntax\nvar w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' '+String(type)+' listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;ProcessEmitWarning$2(w);}}return target;}EventEmitter$1$2.prototype.addListener=function addListener(type,listener){return _addListener$2(this,type,listener,false);};EventEmitter$1$2.prototype.on=EventEmitter$1$2.prototype.addListener;EventEmitter$1$2.prototype.prependListener=function prependListener(type,listener){return _addListener$2(this,type,listener,true);};function onceWrapper$2(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;if(arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments);}}function _onceWrap$2(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=onceWrapper$2.bind(state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter$1$2.prototype.once=function once(type,listener){checkListener$2(listener);this.on(type,_onceWrap$2(this,type,listener));return this;};EventEmitter$1$2.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener$2(listener);this.prependListener(type,_onceWrap$2(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter$1$2.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;checkListener$2(listener);events=this._events;if(events===undefined)return this;list=events[type];if(list===undefined)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=Object.create(null);else {delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else {spliceOne$2(list,position);}if(list.length===1)events[type]=list[0];if(events.removeListener!==undefined)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter$1$2.prototype.off=EventEmitter$1$2.prototype.removeListener;EventEmitter$1$2.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(events===undefined)return this;// not listening for removeListener, no need to emit\nif(events.removeListener===undefined){if(arguments.length===0){this._events=Object.create(null);this._eventsCount=0;}else if(events[type]!==undefined){if(--this._eventsCount===0)this._events=Object.create(null);else delete events[type];}return this;}// emit removeListener for all listeners on all events\nif(arguments.length===0){var keys=Object.keys(events);var key;for(i=0;i=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners$2(target,type,unwrap){var events=target._events;if(events===undefined)return [];var evlistener=events[type];if(evlistener===undefined)return [];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners$2(evlistener):arrayClone$2(evlistener,evlistener.length);}EventEmitter$1$2.prototype.listeners=function listeners(type){return _listeners$2(this,type,true);};EventEmitter$1$2.prototype.rawListeners=function rawListeners(type){return _listeners$2(this,type,false);};EventEmitter$1$2.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else {return listenerCount$2.call(emitter,type);}};EventEmitter$1$2.prototype.listenerCount=listenerCount$2;function listenerCount$2(type){var events=this._events;if(events!==undefined){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener!==undefined){return evlistener.length;}}return 0;}EventEmitter$1$2.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys$2(this._events):[];};function arrayClone$2(arr,n){var copy=new Array(n);for(var i=0;ivalue==='new')){mediaConnectionState=ConnectionState.New;}else if(connectionStates.some(value=>value==='closed')){mediaConnectionState=ConnectionState.Closed;}else if(connectionStates.some(value=>value==='failed')){mediaConnectionState=ConnectionState.Failed;}else if(connectionStates.some(value=>value==='disconnected')){mediaConnectionState=ConnectionState.Disconnected;}else if(connectionStates.every(value=>value==='connected'||value==='completed')){mediaConnectionState=ConnectionState.Connected;}else {mediaConnectionState=ConnectionState.Connecting;}logger$3.log(\"iceConnectionState=\".concat(iceState,\" connectionState=\").concat(connectionState,\" => \").concat(mediaConnectionState));return mediaConnectionState;}/**\n * Gets current connection state.\n *\n * @returns Current connection state.\n */getPeerConnectionState(){var{connectionState}=this.getCurrentStatesCallback();return connectionState;}/**\n * Gets current ice connection state.\n *\n * @returns Current ice connection state.\n */getIceConnectionState(){var{iceState}=this.getCurrentStatesCallback();return iceState;}/**\n * Gets current overall connection state.\n *\n * @returns Current overall connection state.\n */getConnectionState(){return this.evaluateMediaConnectionState();}}ConnectionStateHandler.Events=ConnectionStateEvents;/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */var logDisabled_$1=true;var deprecationWarnings_$1=true;/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */function extractVersion$1(uastring,expr,pos){var match=uastring.match(expr);return match&&match.length>=pos&&parseInt(match[pos],10);}// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nfunction wrapPeerConnectionEvent$1(window,eventNameToWrap,wrapper){if(!window.RTCPeerConnection){return;}var proto=window.RTCPeerConnection.prototype;var nativeAddEventListener=proto.addEventListener;proto.addEventListener=function(nativeEventName,cb){if(nativeEventName!==eventNameToWrap){return nativeAddEventListener.apply(this,arguments);}var wrappedCallback=e=>{var modifiedEvent=wrapper(e);if(modifiedEvent){if(cb.handleEvent){cb.handleEvent(modifiedEvent);}else {cb(modifiedEvent);}}};this._eventMap=this._eventMap||{};if(!this._eventMap[eventNameToWrap]){this._eventMap[eventNameToWrap]=new Map();}this._eventMap[eventNameToWrap].set(cb,wrappedCallback);return nativeAddEventListener.apply(this,[nativeEventName,wrappedCallback]);};var nativeRemoveEventListener=proto.removeEventListener;proto.removeEventListener=function(nativeEventName,cb){if(nativeEventName!==eventNameToWrap||!this._eventMap||!this._eventMap[eventNameToWrap]){return nativeRemoveEventListener.apply(this,arguments);}if(!this._eventMap[eventNameToWrap].has(cb)){return nativeRemoveEventListener.apply(this,arguments);}var unwrappedCb=this._eventMap[eventNameToWrap].get(cb);this._eventMap[eventNameToWrap].delete(cb);if(this._eventMap[eventNameToWrap].size===0){delete this._eventMap[eventNameToWrap];}if(Object.keys(this._eventMap).length===0){delete this._eventMap;}return nativeRemoveEventListener.apply(this,[nativeEventName,unwrappedCb]);};Object.defineProperty(proto,'on'+eventNameToWrap,{get(){return this['_on'+eventNameToWrap];},set(cb){if(this['_on'+eventNameToWrap]){this.removeEventListener(eventNameToWrap,this['_on'+eventNameToWrap]);delete this['_on'+eventNameToWrap];}if(cb){this.addEventListener(eventNameToWrap,this['_on'+eventNameToWrap]=cb);}},enumerable:true,configurable:true});}function disableLog$1(bool){if(typeof bool!=='boolean'){return new Error('Argument type: '+typeof bool+'. Please use a boolean.');}logDisabled_$1=bool;return bool?'adapter.js logging disabled':'adapter.js logging enabled';}/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */function disableWarnings$1(bool){if(typeof bool!=='boolean'){return new Error('Argument type: '+typeof bool+'. Please use a boolean.');}deprecationWarnings_$1=!bool;return 'adapter.js deprecation warnings '+(bool?'disabled':'enabled');}function log$2(){if(typeof window==='object'){if(logDisabled_$1){return;}if(typeof console!=='undefined'&&typeof console.log==='function'){console.log.apply(console,arguments);}}}/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */function deprecated$1(oldMethod,newMethod){if(!deprecationWarnings_$1){return;}console.warn(oldMethod+' is deprecated, please use '+newMethod+' instead.');}/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */function detectBrowser$1(window){// Returned result object.\nvar result={browser:null,version:null};// Fail early if it's not a browser\nif(typeof window==='undefined'||!window.navigator){result.browser='Not a browser.';return result;}var{navigator}=window;if(navigator.mozGetUserMedia){// Firefox.\nresult.browser='firefox';result.version=extractVersion$1(navigator.userAgent,/Firefox\\/(\\d+)\\./,1);}else if(navigator.webkitGetUserMedia||window.isSecureContext===false&&window.webkitRTCPeerConnection){// Chrome, Chromium, Webview, Opera.\n// Version matches Chrome/WebRTC version.\n// Chrome 74 removed webkitGetUserMedia on http as well so we need the\n// more complicated fallback to webkitRTCPeerConnection.\nresult.browser='chrome';result.version=extractVersion$1(navigator.userAgent,/Chrom(e|ium)\\/(\\d+)\\./,2);}else if(window.RTCPeerConnection&&navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)){// Safari.\nresult.browser='safari';result.version=extractVersion$1(navigator.userAgent,/AppleWebKit\\/(\\d+)\\./,1);result.supportsUnifiedPlan=window.RTCRtpTransceiver&&'currentDirection'in window.RTCRtpTransceiver.prototype;}else {// Default fallthrough: not supported.\nresult.browser='Not a supported browser.';return result;}return result;}/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */function isObject$1(val){return Object.prototype.toString.call(val)==='[object Object]';}/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */function compactObject$1(data){if(!isObject$1(data)){return data;}return Object.keys(data).reduce(function(accumulator,key){var isObj=isObject$1(data[key]);var value=isObj?compactObject$1(data[key]):data[key];var isEmptyObject=isObj&&!Object.keys(value).length;if(value===undefined||isEmptyObject){return accumulator;}return Object.assign(accumulator,{[key]:value});},{});}/* iterates the stats graph recursively. */function walkStats$1(stats,base,resultSet){if(!base||resultSet.has(base.id)){return;}resultSet.set(base.id,base);Object.keys(base).forEach(name=>{if(name.endsWith('Id')){walkStats$1(stats,stats.get(base[name]),resultSet);}else if(name.endsWith('Ids')){base[name].forEach(id=>{walkStats$1(stats,stats.get(id),resultSet);});}});}/* filter getStats for a sender/receiver track. */function filterStats$1(result,track,outbound){var streamStatsType=outbound?'outbound-rtp':'inbound-rtp';var filteredResult=new Map();if(track===null){return filteredResult;}var trackStats=[];result.forEach(value=>{if(value.type==='track'&&value.trackIdentifier===track.id){trackStats.push(value);}});trackStats.forEach(trackStat=>{result.forEach(stats=>{if(stats.type===streamStatsType&&stats.trackId===trackStat.id){walkStats$1(result,stats,filteredResult);}});});return filteredResult;}/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */var logging$1=log$2;function shimGetUserMedia$2$1(window,browserDetails){var navigator=window&&window.navigator;if(!navigator.mediaDevices){return;}var constraintsToChrome_=function constraintsToChrome_(c){if(typeof c!=='object'||c.mandatory||c.optional){return c;}var cc={};Object.keys(c).forEach(key=>{if(key==='require'||key==='advanced'||key==='mediaSource'){return;}var r=typeof c[key]==='object'?c[key]:{ideal:c[key]};if(r.exact!==undefined&&typeof r.exact==='number'){r.min=r.max=r.exact;}var oldname_=function oldname_(prefix,name){if(prefix){return prefix+name.charAt(0).toUpperCase()+name.slice(1);}return name==='deviceId'?'sourceId':name;};if(r.ideal!==undefined){cc.optional=cc.optional||[];var oc={};if(typeof r.ideal==='number'){oc[oldname_('min',key)]=r.ideal;cc.optional.push(oc);oc={};oc[oldname_('max',key)]=r.ideal;cc.optional.push(oc);}else {oc[oldname_('',key)]=r.ideal;cc.optional.push(oc);}}if(r.exact!==undefined&&typeof r.exact!=='number'){cc.mandatory=cc.mandatory||{};cc.mandatory[oldname_('',key)]=r.exact;}else {['min','max'].forEach(mix=>{if(r[mix]!==undefined){cc.mandatory=cc.mandatory||{};cc.mandatory[oldname_(mix,key)]=r[mix];}});}});if(c.advanced){cc.optional=(cc.optional||[]).concat(c.advanced);}return cc;};var shimConstraints_=function shimConstraints_(constraints,func){if(browserDetails.version>=61){return func(constraints);}constraints=JSON.parse(JSON.stringify(constraints));if(constraints&&typeof constraints.audio==='object'){var remap=function remap(obj,a,b){if(a in obj&&!(b in obj)){obj[b]=obj[a];delete obj[a];}};constraints=JSON.parse(JSON.stringify(constraints));remap(constraints.audio,'autoGainControl','googAutoGainControl');remap(constraints.audio,'noiseSuppression','googNoiseSuppression');constraints.audio=constraintsToChrome_(constraints.audio);}if(constraints&&typeof constraints.video==='object'){// Shim facingMode for mobile & surface pro.\nvar face=constraints.video.facingMode;face=face&&(typeof face==='object'?face:{ideal:face});var getSupportedFacingModeLies=browserDetails.version<66;if(face&&(face.exact==='user'||face.exact==='environment'||face.ideal==='user'||face.ideal==='environment')&&!(navigator.mediaDevices.getSupportedConstraints&&navigator.mediaDevices.getSupportedConstraints().facingMode&&!getSupportedFacingModeLies)){delete constraints.video.facingMode;var matches;if(face.exact==='environment'||face.ideal==='environment'){matches=['back','rear'];}else if(face.exact==='user'||face.ideal==='user'){matches=['front'];}if(matches){// Look for matches in label, or use last cam for back (typical).\nreturn navigator.mediaDevices.enumerateDevices().then(devices=>{devices=devices.filter(d=>d.kind==='videoinput');var dev=devices.find(d=>matches.some(match=>d.label.toLowerCase().includes(match)));if(!dev&&devices.length&&matches.includes('back')){dev=devices[devices.length-1];// more likely the back cam\n}if(dev){constraints.video.deviceId=face.exact?{exact:dev.deviceId}:{ideal:dev.deviceId};}constraints.video=constraintsToChrome_(constraints.video);logging$1('chrome: '+JSON.stringify(constraints));return func(constraints);});}}constraints.video=constraintsToChrome_(constraints.video);}logging$1('chrome: '+JSON.stringify(constraints));return func(constraints);};var shimError_=function shimError_(e){if(browserDetails.version>=64){return e;}return {name:{PermissionDeniedError:'NotAllowedError',PermissionDismissedError:'NotAllowedError',InvalidStateError:'NotAllowedError',DevicesNotFoundError:'NotFoundError',ConstraintNotSatisfiedError:'OverconstrainedError',TrackStartError:'NotReadableError',MediaDeviceFailedDueToShutdown:'NotAllowedError',MediaDeviceKillSwitchOn:'NotAllowedError',TabCaptureError:'AbortError',ScreenCaptureError:'AbortError',DeviceCaptureError:'AbortError'}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString(){return this.name+(this.message&&': ')+this.message;}};};var getUserMedia_=function getUserMedia_(constraints,onSuccess,onError){shimConstraints_(constraints,c=>{navigator.webkitGetUserMedia(c,onSuccess,e=>{if(onError){onError(shimError_(e));}});});};navigator.getUserMedia=getUserMedia_.bind(navigator);// Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n// function which returns a Promise, it does not accept spec-style\n// constraints.\nif(navigator.mediaDevices.getUserMedia){var origGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(cs){return shimConstraints_(cs,c=>origGetUserMedia(c).then(stream=>{if(c.audio&&!stream.getAudioTracks().length||c.video&&!stream.getVideoTracks().length){stream.getTracks().forEach(track=>{track.stop();});throw new DOMException('','NotFoundError');}return stream;},e=>Promise.reject(shimError_(e))));};}}/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */function shimGetDisplayMedia$1$1(window,getSourceId){if(window.navigator.mediaDevices&&'getDisplayMedia'in window.navigator.mediaDevices){return;}if(!window.navigator.mediaDevices){return;}// getSourceId is a function that returns a promise resolving with\n// the sourceId of the screen/window/tab to be shared.\nif(typeof getSourceId!=='function'){console.error('shimGetDisplayMedia: getSourceId argument is not '+'a function');return;}window.navigator.mediaDevices.getDisplayMedia=function getDisplayMedia(constraints){return getSourceId(constraints).then(sourceId=>{var widthSpecified=constraints.video&&constraints.video.width;var heightSpecified=constraints.video&&constraints.video.height;var frameRateSpecified=constraints.video&&constraints.video.frameRate;constraints.video={mandatory:{chromeMediaSource:'desktop',chromeMediaSourceId:sourceId,maxFrameRate:frameRateSpecified||3}};if(widthSpecified){constraints.video.mandatory.maxWidth=widthSpecified;}if(heightSpecified){constraints.video.mandatory.maxHeight=heightSpecified;}return window.navigator.mediaDevices.getUserMedia(constraints);});};}/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */function shimMediaStream$1(window){window.MediaStream=window.MediaStream||window.webkitMediaStream;}function shimOnTrack$1$1(window){if(typeof window==='object'&&window.RTCPeerConnection&&!('ontrack'in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,'ontrack',{get(){return this._ontrack;},set(f){if(this._ontrack){this.removeEventListener('track',this._ontrack);}this.addEventListener('track',this._ontrack=f);},enumerable:true,configurable:true});var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function setRemoteDescription(){if(!this._ontrackpoly){this._ontrackpoly=e=>{// onaddstream does not fire when a track is added to an existing\n// stream. But stream.onaddtrack is implemented so we use that.\ne.stream.addEventListener('addtrack',te=>{var receiver;if(window.RTCPeerConnection.prototype.getReceivers){receiver=this.getReceivers().find(r=>r.track&&r.track.id===te.track.id);}else {receiver={track:te.track};}var event=new Event('track');event.track=te.track;event.receiver=receiver;event.transceiver={receiver};event.streams=[e.stream];this.dispatchEvent(event);});e.stream.getTracks().forEach(track=>{var receiver;if(window.RTCPeerConnection.prototype.getReceivers){receiver=this.getReceivers().find(r=>r.track&&r.track.id===track.id);}else {receiver={track};}var event=new Event('track');event.track=track;event.receiver=receiver;event.transceiver={receiver};event.streams=[e.stream];this.dispatchEvent(event);});};this.addEventListener('addstream',this._ontrackpoly);}return origSetRemoteDescription.apply(this,arguments);};}else {// even if RTCRtpTransceiver is in window, it is only used and\n// emitted in unified-plan. Unfortunately this means we need\n// to unconditionally wrap the event.\nwrapPeerConnectionEvent$1(window,'track',e=>{if(!e.transceiver){Object.defineProperty(e,'transceiver',{value:{receiver:e.receiver}});}return e;});}}function shimGetSendersWithDtmf$1(window){// Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\nif(typeof window==='object'&&window.RTCPeerConnection&&!('getSenders'in window.RTCPeerConnection.prototype)&&'createDTMFSender'in window.RTCPeerConnection.prototype){var shimSenderWithDtmf=function shimSenderWithDtmf(pc,track){return {track,get dtmf(){if(this._dtmf===undefined){if(track.kind==='audio'){this._dtmf=pc.createDTMFSender(track);}else {this._dtmf=null;}}return this._dtmf;},_pc:pc};};// augment addTrack when getSenders is not available.\nif(!window.RTCPeerConnection.prototype.getSenders){window.RTCPeerConnection.prototype.getSenders=function getSenders(){this._senders=this._senders||[];return this._senders.slice();// return a copy of the internal state.\n};var origAddTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addTrack=function addTrack(track,stream){var sender=origAddTrack.apply(this,arguments);if(!sender){sender=shimSenderWithDtmf(this,track);this._senders.push(sender);}return sender;};var origRemoveTrack=window.RTCPeerConnection.prototype.removeTrack;window.RTCPeerConnection.prototype.removeTrack=function removeTrack(sender){origRemoveTrack.apply(this,arguments);var idx=this._senders.indexOf(sender);if(idx!==-1){this._senders.splice(idx,1);}};}var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function addStream(stream){this._senders=this._senders||[];origAddStream.apply(this,[stream]);stream.getTracks().forEach(track=>{this._senders.push(shimSenderWithDtmf(this,track));});};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function removeStream(stream){this._senders=this._senders||[];origRemoveStream.apply(this,[stream]);stream.getTracks().forEach(track=>{var sender=this._senders.find(s=>s.track===track);if(sender){// remove sender\nthis._senders.splice(this._senders.indexOf(sender),1);}});};}else if(typeof window==='object'&&window.RTCPeerConnection&&'getSenders'in window.RTCPeerConnection.prototype&&'createDTMFSender'in window.RTCPeerConnection.prototype&&window.RTCRtpSender&&!('dtmf'in window.RTCRtpSender.prototype)){var origGetSenders=window.RTCPeerConnection.prototype.getSenders;window.RTCPeerConnection.prototype.getSenders=function getSenders(){var senders=origGetSenders.apply(this,[]);senders.forEach(sender=>sender._pc=this);return senders;};Object.defineProperty(window.RTCRtpSender.prototype,'dtmf',{get(){if(this._dtmf===undefined){if(this.track.kind==='audio'){this._dtmf=this._pc.createDTMFSender(this.track);}else {this._dtmf=null;}}return this._dtmf;}});}}function shimGetStats$1(window){if(!window.RTCPeerConnection){return;}var origGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function getStats(){var[selector,onSucc,onErr]=arguments;// If selector is a function then we are in the old style stats so just\n// pass back the original getStats format to avoid breaking old users.\nif(arguments.length>0&&typeof selector==='function'){return origGetStats.apply(this,arguments);}// When spec-style getStats is supported, return those when called with\n// either no arguments or the selector argument is null.\nif(origGetStats.length===0&&(arguments.length===0||typeof selector!=='function')){return origGetStats.apply(this,[]);}var fixChromeStats_=function fixChromeStats_(response){var standardReport={};var reports=response.result();reports.forEach(report=>{var standardStats={id:report.id,timestamp:report.timestamp,type:{localcandidate:'local-candidate',remotecandidate:'remote-candidate'}[report.type]||report.type};report.names().forEach(name=>{standardStats[name]=report.stat(name);});standardReport[standardStats.id]=standardStats;});return standardReport;};// shim getStats with maplike support\nvar makeMapStats=function makeMapStats(stats){return new Map(Object.keys(stats).map(key=>[key,stats[key]]));};if(arguments.length>=2){var successCallbackWrapper_=function successCallbackWrapper_(response){onSucc(makeMapStats(fixChromeStats_(response)));};return origGetStats.apply(this,[successCallbackWrapper_,selector]);}// promise-support\nreturn new Promise((resolve,reject)=>{origGetStats.apply(this,[function(response){resolve(makeMapStats(fixChromeStats_(response)));},reject]);}).then(onSucc,onErr);};}function shimSenderReceiverGetStats$1(window){if(!(typeof window==='object'&&window.RTCPeerConnection&&window.RTCRtpSender&&window.RTCRtpReceiver)){return;}// shim sender stats.\nif(!('getStats'in window.RTCRtpSender.prototype)){var origGetSenders=window.RTCPeerConnection.prototype.getSenders;if(origGetSenders){window.RTCPeerConnection.prototype.getSenders=function getSenders(){var senders=origGetSenders.apply(this,[]);senders.forEach(sender=>sender._pc=this);return senders;};}var origAddTrack=window.RTCPeerConnection.prototype.addTrack;if(origAddTrack){window.RTCPeerConnection.prototype.addTrack=function addTrack(){var sender=origAddTrack.apply(this,arguments);sender._pc=this;return sender;};}window.RTCRtpSender.prototype.getStats=function getStats(){var sender=this;return this._pc.getStats().then(result=>/* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */filterStats$1(result,sender.track,true));};}// shim receiver stats.\nif(!('getStats'in window.RTCRtpReceiver.prototype)){var origGetReceivers=window.RTCPeerConnection.prototype.getReceivers;if(origGetReceivers){window.RTCPeerConnection.prototype.getReceivers=function getReceivers(){var receivers=origGetReceivers.apply(this,[]);receivers.forEach(receiver=>receiver._pc=this);return receivers;};}wrapPeerConnectionEvent$1(window,'track',e=>{e.receiver._pc=e.srcElement;return e;});window.RTCRtpReceiver.prototype.getStats=function getStats(){var receiver=this;return this._pc.getStats().then(result=>filterStats$1(result,receiver.track,false));};}if(!('getStats'in window.RTCRtpSender.prototype&&'getStats'in window.RTCRtpReceiver.prototype)){return;}// shim RTCPeerConnection.getStats(track).\nvar origGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function getStats(){if(arguments.length>0&&arguments[0]instanceof window.MediaStreamTrack){var track=arguments[0];var sender;var receiver;var err;this.getSenders().forEach(s=>{if(s.track===track){if(sender){err=true;}else {sender=s;}}});this.getReceivers().forEach(r=>{if(r.track===track){if(receiver){err=true;}else {receiver=r;}}return r.track===track;});if(err||sender&&receiver){return Promise.reject(new DOMException('There are more than one sender or receiver for the track.','InvalidAccessError'));}else if(sender){return sender.getStats();}else if(receiver){return receiver.getStats();}return Promise.reject(new DOMException('There is no sender or receiver for the track.','InvalidAccessError'));}return origGetStats.apply(this,arguments);};}function shimAddTrackRemoveTrackWithNative$1(window){// shim addTrack/removeTrack with native variants in order to make\n// the interactions with legacy getLocalStreams behave as in other browsers.\n// Keeps a mapping stream.id => [stream, rtpsenders...]\nwindow.RTCPeerConnection.prototype.getLocalStreams=function getLocalStreams(){this._shimmedLocalStreams=this._shimmedLocalStreams||{};return Object.keys(this._shimmedLocalStreams).map(streamId=>this._shimmedLocalStreams[streamId][0]);};var origAddTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addTrack=function addTrack(track,stream){if(!stream){return origAddTrack.apply(this,arguments);}this._shimmedLocalStreams=this._shimmedLocalStreams||{};var sender=origAddTrack.apply(this,arguments);if(!this._shimmedLocalStreams[stream.id]){this._shimmedLocalStreams[stream.id]=[stream,sender];}else if(this._shimmedLocalStreams[stream.id].indexOf(sender)===-1){this._shimmedLocalStreams[stream.id].push(sender);}return sender;};var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function addStream(stream){this._shimmedLocalStreams=this._shimmedLocalStreams||{};stream.getTracks().forEach(track=>{var alreadyExists=this.getSenders().find(s=>s.track===track);if(alreadyExists){throw new DOMException('Track already exists.','InvalidAccessError');}});var existingSenders=this.getSenders();origAddStream.apply(this,arguments);var newSenders=this.getSenders().filter(newSender=>existingSenders.indexOf(newSender)===-1);this._shimmedLocalStreams[stream.id]=[stream].concat(newSenders);};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function removeStream(stream){this._shimmedLocalStreams=this._shimmedLocalStreams||{};delete this._shimmedLocalStreams[stream.id];return origRemoveStream.apply(this,arguments);};var origRemoveTrack=window.RTCPeerConnection.prototype.removeTrack;window.RTCPeerConnection.prototype.removeTrack=function removeTrack(sender){this._shimmedLocalStreams=this._shimmedLocalStreams||{};if(sender){Object.keys(this._shimmedLocalStreams).forEach(streamId=>{var idx=this._shimmedLocalStreams[streamId].indexOf(sender);if(idx!==-1){this._shimmedLocalStreams[streamId].splice(idx,1);}if(this._shimmedLocalStreams[streamId].length===1){delete this._shimmedLocalStreams[streamId];}});}return origRemoveTrack.apply(this,arguments);};}function shimAddTrackRemoveTrack$1(window,browserDetails){if(!window.RTCPeerConnection){return;}// shim addTrack and removeTrack.\nif(window.RTCPeerConnection.prototype.addTrack&&browserDetails.version>=65){return shimAddTrackRemoveTrackWithNative$1(window);}// also shim pc.getLocalStreams when addTrack is shimmed\n// to return the original streams.\nvar origGetLocalStreams=window.RTCPeerConnection.prototype.getLocalStreams;window.RTCPeerConnection.prototype.getLocalStreams=function getLocalStreams(){var nativeStreams=origGetLocalStreams.apply(this);this._reverseStreams=this._reverseStreams||{};return nativeStreams.map(stream=>this._reverseStreams[stream.id]);};var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function addStream(stream){this._streams=this._streams||{};this._reverseStreams=this._reverseStreams||{};stream.getTracks().forEach(track=>{var alreadyExists=this.getSenders().find(s=>s.track===track);if(alreadyExists){throw new DOMException('Track already exists.','InvalidAccessError');}});// Add identity mapping for consistency with addTrack.\n// Unless this is being used with a stream from addTrack.\nif(!this._reverseStreams[stream.id]){var newStream=new window.MediaStream(stream.getTracks());this._streams[stream.id]=newStream;this._reverseStreams[newStream.id]=stream;stream=newStream;}origAddStream.apply(this,[stream]);};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function removeStream(stream){this._streams=this._streams||{};this._reverseStreams=this._reverseStreams||{};origRemoveStream.apply(this,[this._streams[stream.id]||stream]);delete this._reverseStreams[this._streams[stream.id]?this._streams[stream.id].id:stream.id];delete this._streams[stream.id];};window.RTCPeerConnection.prototype.addTrack=function addTrack(track,stream){if(this.signalingState==='closed'){throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.','InvalidStateError');}var streams=[].slice.call(arguments,1);if(streams.length!==1||!streams[0].getTracks().find(t=>t===track)){// this is not fully correct but all we can manage without\n// [[associated MediaStreams]] internal slot.\nthrow new DOMException('The adapter.js addTrack polyfill only supports a single '+' stream which is associated with the specified track.','NotSupportedError');}var alreadyExists=this.getSenders().find(s=>s.track===track);if(alreadyExists){throw new DOMException('Track already exists.','InvalidAccessError');}this._streams=this._streams||{};this._reverseStreams=this._reverseStreams||{};var oldStream=this._streams[stream.id];if(oldStream){// this is using odd Chrome behaviour, use with caution:\n// https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n// Note: we rely on the high-level addTrack/dtmf shim to\n// create the sender with a dtmf sender.\noldStream.addTrack(track);// Trigger ONN async.\nPromise.resolve().then(()=>{this.dispatchEvent(new Event('negotiationneeded'));});}else {var newStream=new window.MediaStream([track]);this._streams[stream.id]=newStream;this._reverseStreams[newStream.id]=stream;this.addStream(newStream);}return this.getSenders().find(s=>s.track===track);};// replace the internal stream id with the external one and\n// vice versa.\nfunction replaceInternalStreamId(pc,description){var sdp=description.sdp;Object.keys(pc._reverseStreams||[]).forEach(internalId=>{var externalStream=pc._reverseStreams[internalId];var internalStream=pc._streams[externalStream.id];sdp=sdp.replace(new RegExp(internalStream.id,'g'),externalStream.id);});return new RTCSessionDescription({type:description.type,sdp});}function replaceExternalStreamId(pc,description){var sdp=description.sdp;Object.keys(pc._reverseStreams||[]).forEach(internalId=>{var externalStream=pc._reverseStreams[internalId];var internalStream=pc._streams[externalStream.id];sdp=sdp.replace(new RegExp(externalStream.id,'g'),internalStream.id);});return new RTCSessionDescription({type:description.type,sdp});}['createOffer','createAnswer'].forEach(function(method){var nativeMethod=window.RTCPeerConnection.prototype[method];var methodObj={[method](){var args=arguments;var isLegacyCall=arguments.length&&typeof arguments[0]==='function';if(isLegacyCall){return nativeMethod.apply(this,[description=>{var desc=replaceInternalStreamId(this,description);args[0].apply(null,[desc]);},err=>{if(args[1]){args[1].apply(null,err);}},arguments[2]]);}return nativeMethod.apply(this,arguments).then(description=>replaceInternalStreamId(this,description));}};window.RTCPeerConnection.prototype[method]=methodObj[method];});var origSetLocalDescription=window.RTCPeerConnection.prototype.setLocalDescription;window.RTCPeerConnection.prototype.setLocalDescription=function setLocalDescription(){if(!arguments.length||!arguments[0].type){return origSetLocalDescription.apply(this,arguments);}arguments[0]=replaceExternalStreamId(this,arguments[0]);return origSetLocalDescription.apply(this,arguments);};// TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\nvar origLocalDescription=Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype,'localDescription');Object.defineProperty(window.RTCPeerConnection.prototype,'localDescription',{get(){var description=origLocalDescription.get.apply(this);if(description.type===''){return description;}return replaceInternalStreamId(this,description);}});window.RTCPeerConnection.prototype.removeTrack=function removeTrack(sender){if(this.signalingState==='closed'){throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.','InvalidStateError');}// We can not yet check for sender instanceof RTCRtpSender\n// since we shim RTPSender. So we check if sender._pc is set.\nif(!sender._pc){throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack '+'does not implement interface RTCRtpSender.','TypeError');}var isLocal=sender._pc===this;if(!isLocal){throw new DOMException('Sender was not created by this connection.','InvalidAccessError');}// Search for the native stream the senders track belongs to.\nthis._streams=this._streams||{};var stream;Object.keys(this._streams).forEach(streamid=>{var hasTrack=this._streams[streamid].getTracks().find(track=>sender.track===track);if(hasTrack){stream=this._streams[streamid];}});if(stream){if(stream.getTracks().length===1){// if this is the last track of the stream, remove the stream. This\n// takes care of any shimmed _senders.\nthis.removeStream(this._reverseStreams[stream.id]);}else {// relying on the same odd chrome behaviour as above.\nstream.removeTrack(sender.track);}this.dispatchEvent(new Event('negotiationneeded'));}};}function shimPeerConnection$1$1(window,browserDetails){if(!window.RTCPeerConnection&&window.webkitRTCPeerConnection){// very basic support for old versions.\nwindow.RTCPeerConnection=window.webkitRTCPeerConnection;}if(!window.RTCPeerConnection){return;}// shim implicit creation of RTCSessionDescription/RTCIceCandidate\nif(browserDetails.version<53){['setLocalDescription','setRemoteDescription','addIceCandidate'].forEach(function(method){var nativeMethod=window.RTCPeerConnection.prototype[method];var methodObj={[method](){arguments[0]=new(method==='addIceCandidate'?window.RTCIceCandidate:window.RTCSessionDescription)(arguments[0]);return nativeMethod.apply(this,arguments);}};window.RTCPeerConnection.prototype[method]=methodObj[method];});}}// Attempt to fix ONN in plan-b mode.\nfunction fixNegotiationNeeded$1(window,browserDetails){wrapPeerConnectionEvent$1(window,'negotiationneeded',e=>{var pc=e.target;if(browserDetails.version<72||pc.getConfiguration&&pc.getConfiguration().sdpSemantics==='plan-b'){if(pc.signalingState!=='stable'){return;}}return e;});}var chromeShim$1=/*#__PURE__*/Object.freeze({__proto__:null,shimMediaStream:shimMediaStream$1,shimOnTrack:shimOnTrack$1$1,shimGetSendersWithDtmf:shimGetSendersWithDtmf$1,shimGetStats:shimGetStats$1,shimSenderReceiverGetStats:shimSenderReceiverGetStats$1,shimAddTrackRemoveTrackWithNative:shimAddTrackRemoveTrackWithNative$1,shimAddTrackRemoveTrack:shimAddTrackRemoveTrack$1,shimPeerConnection:shimPeerConnection$1$1,fixNegotiationNeeded:fixNegotiationNeeded$1,shimGetUserMedia:shimGetUserMedia$2$1,shimGetDisplayMedia:shimGetDisplayMedia$1$1});/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */function shimGetUserMedia$1$1(window,browserDetails){var navigator=window&&window.navigator;var MediaStreamTrack=window&&window.MediaStreamTrack;navigator.getUserMedia=function(constraints,onSuccess,onError){// Replace Firefox 44+'s deprecation warning with unprefixed version.\ndeprecated$1('navigator.getUserMedia','navigator.mediaDevices.getUserMedia');navigator.mediaDevices.getUserMedia(constraints).then(onSuccess,onError);};if(!(browserDetails.version>55&&'autoGainControl'in navigator.mediaDevices.getSupportedConstraints())){var remap=function remap(obj,a,b){if(a in obj&&!(b in obj)){obj[b]=obj[a];delete obj[a];}};var nativeGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(c){if(typeof c==='object'&&typeof c.audio==='object'){c=JSON.parse(JSON.stringify(c));remap(c.audio,'autoGainControl','mozAutoGainControl');remap(c.audio,'noiseSuppression','mozNoiseSuppression');}return nativeGetUserMedia(c);};if(MediaStreamTrack&&MediaStreamTrack.prototype.getSettings){var nativeGetSettings=MediaStreamTrack.prototype.getSettings;MediaStreamTrack.prototype.getSettings=function(){var obj=nativeGetSettings.apply(this,arguments);remap(obj,'mozAutoGainControl','autoGainControl');remap(obj,'mozNoiseSuppression','noiseSuppression');return obj;};}if(MediaStreamTrack&&MediaStreamTrack.prototype.applyConstraints){var nativeApplyConstraints=MediaStreamTrack.prototype.applyConstraints;MediaStreamTrack.prototype.applyConstraints=function(c){if(this.kind==='audio'&&typeof c==='object'){c=JSON.parse(JSON.stringify(c));remap(c,'autoGainControl','mozAutoGainControl');remap(c,'noiseSuppression','mozNoiseSuppression');}return nativeApplyConstraints.apply(this,[c]);};}}}/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */function shimGetDisplayMedia$2(window,preferredMediaSource){if(window.navigator.mediaDevices&&'getDisplayMedia'in window.navigator.mediaDevices){return;}if(!window.navigator.mediaDevices){return;}window.navigator.mediaDevices.getDisplayMedia=function getDisplayMedia(constraints){if(!(constraints&&constraints.video)){var err=new DOMException('getDisplayMedia without video '+'constraints is undefined');err.name='NotFoundError';// from https://heycam.github.io/webidl/#idl-DOMException-error-names\nerr.code=8;return Promise.reject(err);}if(constraints.video===true){constraints.video={mediaSource:preferredMediaSource};}else {constraints.video.mediaSource=preferredMediaSource;}return window.navigator.mediaDevices.getUserMedia(constraints);};}/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */function shimOnTrack$2(window){if(typeof window==='object'&&window.RTCTrackEvent&&'receiver'in window.RTCTrackEvent.prototype&&!('transceiver'in window.RTCTrackEvent.prototype)){Object.defineProperty(window.RTCTrackEvent.prototype,'transceiver',{get(){return {receiver:this.receiver};}});}}function shimPeerConnection$2(window,browserDetails){if(typeof window!=='object'||!(window.RTCPeerConnection||window.mozRTCPeerConnection)){return;// probably media.peerconnection.enabled=false in about:config\n}if(!window.RTCPeerConnection&&window.mozRTCPeerConnection){// very basic support for old versions.\nwindow.RTCPeerConnection=window.mozRTCPeerConnection;}if(browserDetails.version<53){// shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n['setLocalDescription','setRemoteDescription','addIceCandidate'].forEach(function(method){var nativeMethod=window.RTCPeerConnection.prototype[method];var methodObj={[method](){arguments[0]=new(method==='addIceCandidate'?window.RTCIceCandidate:window.RTCSessionDescription)(arguments[0]);return nativeMethod.apply(this,arguments);}};window.RTCPeerConnection.prototype[method]=methodObj[method];});}var modernStatsTypes={inboundrtp:'inbound-rtp',outboundrtp:'outbound-rtp',candidatepair:'candidate-pair',localcandidate:'local-candidate',remotecandidate:'remote-candidate'};var nativeGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function getStats(){var[selector,onSucc,onErr]=arguments;return nativeGetStats.apply(this,[selector||null]).then(stats=>{if(browserDetails.version<53&&!onSucc){// Shim only promise getStats with spec-hyphens in type names\n// Leave callback version alone; misc old uses of forEach before Map\ntry{stats.forEach(stat=>{stat.type=modernStatsTypes[stat.type]||stat.type;});}catch(e){if(e.name!=='TypeError'){throw e;}// Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\nstats.forEach((stat,i)=>{stats.set(i,Object.assign({},stat,{type:modernStatsTypes[stat.type]||stat.type}));});}}return stats;}).then(onSucc,onErr);};}function shimSenderGetStats$1(window){if(!(typeof window==='object'&&window.RTCPeerConnection&&window.RTCRtpSender)){return;}if(window.RTCRtpSender&&'getStats'in window.RTCRtpSender.prototype){return;}var origGetSenders=window.RTCPeerConnection.prototype.getSenders;if(origGetSenders){window.RTCPeerConnection.prototype.getSenders=function getSenders(){var senders=origGetSenders.apply(this,[]);senders.forEach(sender=>sender._pc=this);return senders;};}var origAddTrack=window.RTCPeerConnection.prototype.addTrack;if(origAddTrack){window.RTCPeerConnection.prototype.addTrack=function addTrack(){var sender=origAddTrack.apply(this,arguments);sender._pc=this;return sender;};}window.RTCRtpSender.prototype.getStats=function getStats(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map());};}function shimReceiverGetStats$1(window){if(!(typeof window==='object'&&window.RTCPeerConnection&&window.RTCRtpSender)){return;}if(window.RTCRtpSender&&'getStats'in window.RTCRtpReceiver.prototype){return;}var origGetReceivers=window.RTCPeerConnection.prototype.getReceivers;if(origGetReceivers){window.RTCPeerConnection.prototype.getReceivers=function getReceivers(){var receivers=origGetReceivers.apply(this,[]);receivers.forEach(receiver=>receiver._pc=this);return receivers;};}wrapPeerConnectionEvent$1(window,'track',e=>{e.receiver._pc=e.srcElement;return e;});window.RTCRtpReceiver.prototype.getStats=function getStats(){return this._pc.getStats(this.track);};}function shimRemoveStream$1(window){if(!window.RTCPeerConnection||'removeStream'in window.RTCPeerConnection.prototype){return;}window.RTCPeerConnection.prototype.removeStream=function removeStream(stream){deprecated$1('removeStream','removeTrack');this.getSenders().forEach(sender=>{if(sender.track&&stream.getTracks().includes(sender.track)){this.removeTrack(sender);}});};}function shimRTCDataChannel$1(window){// rename DataChannel to RTCDataChannel (native fix in FF60):\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\nif(window.DataChannel&&!window.RTCDataChannel){window.RTCDataChannel=window.DataChannel;}}function shimAddTransceiver$1(window){// https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n// Firefox ignores the init sendEncodings options passed to addTransceiver\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\nif(!(typeof window==='object'&&window.RTCPeerConnection)){return;}var origAddTransceiver=window.RTCPeerConnection.prototype.addTransceiver;if(origAddTransceiver){window.RTCPeerConnection.prototype.addTransceiver=function addTransceiver(){this.setParametersPromises=[];// WebIDL input coercion and validation\nvar sendEncodings=arguments[1]&&arguments[1].sendEncodings;if(sendEncodings===undefined){sendEncodings=[];}sendEncodings=[...sendEncodings];var shouldPerformCheck=sendEncodings.length>0;if(shouldPerformCheck){// If sendEncodings params are provided, validate grammar\nsendEncodings.forEach(encodingParam=>{if('rid'in encodingParam){var ridRegex=/^[a-z0-9]{0,16}$/i;if(!ridRegex.test(encodingParam.rid)){throw new TypeError('Invalid RID value provided.');}}if('scaleResolutionDownBy'in encodingParam){if(!(parseFloat(encodingParam.scaleResolutionDownBy)>=1.0)){throw new RangeError('scale_resolution_down_by must be >= 1.0');}}if('maxFramerate'in encodingParam){if(!(parseFloat(encodingParam.maxFramerate)>=0)){throw new RangeError('max_framerate must be >= 0.0');}}});}var transceiver=origAddTransceiver.apply(this,arguments);if(shouldPerformCheck){// Check if the init options were applied. If not we do this in an\n// asynchronous way and save the promise reference in a global object.\n// This is an ugly hack, but at the same time is way more robust than\n// checking the sender parameters before and after the createOffer\n// Also note that after the createoffer we are not 100% sure that\n// the params were asynchronously applied so we might miss the\n// opportunity to recreate offer.\nvar{sender}=transceiver;var params=sender.getParameters();if(!('encodings'in params)||// Avoid being fooled by patched getParameters() below.\nparams.encodings.length===1&&Object.keys(params.encodings[0]).length===0){params.encodings=sendEncodings;sender.sendEncodings=sendEncodings;this.setParametersPromises.push(sender.setParameters(params).then(()=>{delete sender.sendEncodings;}).catch(()=>{delete sender.sendEncodings;}));}}return transceiver;};}}function shimGetParameters$1(window){if(!(typeof window==='object'&&window.RTCRtpSender)){return;}var origGetParameters=window.RTCRtpSender.prototype.getParameters;if(origGetParameters){window.RTCRtpSender.prototype.getParameters=function getParameters(){var params=origGetParameters.apply(this,arguments);if(!('encodings'in params)){params.encodings=[].concat(this.sendEncodings||[{}]);}return params;};}}function shimCreateOffer$1(window){// https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n// Firefox ignores the init sendEncodings options passed to addTransceiver\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\nif(!(typeof window==='object'&&window.RTCPeerConnection)){return;}var origCreateOffer=window.RTCPeerConnection.prototype.createOffer;window.RTCPeerConnection.prototype.createOffer=function createOffer(){if(this.setParametersPromises&&this.setParametersPromises.length){return Promise.all(this.setParametersPromises).then(()=>{return origCreateOffer.apply(this,arguments);}).finally(()=>{this.setParametersPromises=[];});}return origCreateOffer.apply(this,arguments);};}function shimCreateAnswer$1(window){// https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n// Firefox ignores the init sendEncodings options passed to addTransceiver\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\nif(!(typeof window==='object'&&window.RTCPeerConnection)){return;}var origCreateAnswer=window.RTCPeerConnection.prototype.createAnswer;window.RTCPeerConnection.prototype.createAnswer=function createAnswer(){if(this.setParametersPromises&&this.setParametersPromises.length){return Promise.all(this.setParametersPromises).then(()=>{return origCreateAnswer.apply(this,arguments);}).finally(()=>{this.setParametersPromises=[];});}return origCreateAnswer.apply(this,arguments);};}var firefoxShim$1=/*#__PURE__*/Object.freeze({__proto__:null,shimOnTrack:shimOnTrack$2,shimPeerConnection:shimPeerConnection$2,shimSenderGetStats:shimSenderGetStats$1,shimReceiverGetStats:shimReceiverGetStats$1,shimRemoveStream:shimRemoveStream$1,shimRTCDataChannel:shimRTCDataChannel$1,shimAddTransceiver:shimAddTransceiver$1,shimGetParameters:shimGetParameters$1,shimCreateOffer:shimCreateOffer$1,shimCreateAnswer:shimCreateAnswer$1,shimGetUserMedia:shimGetUserMedia$1$1,shimGetDisplayMedia:shimGetDisplayMedia$2});/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */function shimLocalStreamsAPI$1(window){if(typeof window!=='object'||!window.RTCPeerConnection){return;}if(!('getLocalStreams'in window.RTCPeerConnection.prototype)){window.RTCPeerConnection.prototype.getLocalStreams=function getLocalStreams(){if(!this._localStreams){this._localStreams=[];}return this._localStreams;};}if(!('addStream'in window.RTCPeerConnection.prototype)){var _addTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addStream=function addStream(stream){if(!this._localStreams){this._localStreams=[];}if(!this._localStreams.includes(stream)){this._localStreams.push(stream);}// Try to emulate Chrome's behaviour of adding in audio-video order.\n// Safari orders by track id.\nstream.getAudioTracks().forEach(track=>_addTrack.call(this,track,stream));stream.getVideoTracks().forEach(track=>_addTrack.call(this,track,stream));};window.RTCPeerConnection.prototype.addTrack=function addTrack(track){for(var _len2=arguments.length,streams=new Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++){streams[_key2-1]=arguments[_key2];}if(streams){streams.forEach(stream=>{if(!this._localStreams){this._localStreams=[stream];}else if(!this._localStreams.includes(stream)){this._localStreams.push(stream);}});}return _addTrack.apply(this,arguments);};}if(!('removeStream'in window.RTCPeerConnection.prototype)){window.RTCPeerConnection.prototype.removeStream=function removeStream(stream){if(!this._localStreams){this._localStreams=[];}var index=this._localStreams.indexOf(stream);if(index===-1){return;}this._localStreams.splice(index,1);var tracks=stream.getTracks();this.getSenders().forEach(sender=>{if(tracks.includes(sender.track)){this.removeTrack(sender);}});};}}function shimRemoteStreamsAPI$1(window){if(typeof window!=='object'||!window.RTCPeerConnection){return;}if(!('getRemoteStreams'in window.RTCPeerConnection.prototype)){window.RTCPeerConnection.prototype.getRemoteStreams=function getRemoteStreams(){return this._remoteStreams?this._remoteStreams:[];};}if(!('onaddstream'in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,'onaddstream',{get(){return this._onaddstream;},set(f){if(this._onaddstream){this.removeEventListener('addstream',this._onaddstream);this.removeEventListener('track',this._onaddstreampoly);}this.addEventListener('addstream',this._onaddstream=f);this.addEventListener('track',this._onaddstreampoly=e=>{e.streams.forEach(stream=>{if(!this._remoteStreams){this._remoteStreams=[];}if(this._remoteStreams.includes(stream)){return;}this._remoteStreams.push(stream);var event=new Event('addstream');event.stream=stream;this.dispatchEvent(event);});});}});var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function setRemoteDescription(){var pc=this;if(!this._onaddstreampoly){this.addEventListener('track',this._onaddstreampoly=function(e){e.streams.forEach(stream=>{if(!pc._remoteStreams){pc._remoteStreams=[];}if(pc._remoteStreams.indexOf(stream)>=0){return;}pc._remoteStreams.push(stream);var event=new Event('addstream');event.stream=stream;pc.dispatchEvent(event);});});}return origSetRemoteDescription.apply(pc,arguments);};}}function shimCallbacksAPI$1(window){if(typeof window!=='object'||!window.RTCPeerConnection){return;}var prototype=window.RTCPeerConnection.prototype;var origCreateOffer=prototype.createOffer;var origCreateAnswer=prototype.createAnswer;var setLocalDescription=prototype.setLocalDescription;var setRemoteDescription=prototype.setRemoteDescription;var addIceCandidate=prototype.addIceCandidate;prototype.createOffer=function createOffer(successCallback,failureCallback){var options=arguments.length>=2?arguments[2]:arguments[0];var promise=origCreateOffer.apply(this,[options]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.createAnswer=function createAnswer(successCallback,failureCallback){var options=arguments.length>=2?arguments[2]:arguments[0];var promise=origCreateAnswer.apply(this,[options]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};var withCallback=function withCallback(description,successCallback,failureCallback){var promise=setLocalDescription.apply(this,[description]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.setLocalDescription=withCallback;withCallback=function withCallback(description,successCallback,failureCallback){var promise=setRemoteDescription.apply(this,[description]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.setRemoteDescription=withCallback;withCallback=function withCallback(candidate,successCallback,failureCallback){var promise=addIceCandidate.apply(this,[candidate]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.addIceCandidate=withCallback;}function shimGetUserMedia$3(window){var navigator=window&&window.navigator;if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){// shim not needed in Safari 12.1\nvar mediaDevices=navigator.mediaDevices;var _getUserMedia=mediaDevices.getUserMedia.bind(mediaDevices);navigator.mediaDevices.getUserMedia=constraints=>{return _getUserMedia(shimConstraints$1(constraints));};}if(!navigator.getUserMedia&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){navigator.getUserMedia=function getUserMedia(constraints,cb,errcb){navigator.mediaDevices.getUserMedia(constraints).then(cb,errcb);}.bind(navigator);}}function shimConstraints$1(constraints){if(constraints&&constraints.video!==undefined){return Object.assign({},constraints,{video:compactObject$1(constraints.video)});}return constraints;}function shimRTCIceServerUrls$1(window){if(!window.RTCPeerConnection){return;}// migrate from non-spec RTCIceServer.url to RTCIceServer.urls\nvar OrigPeerConnection=window.RTCPeerConnection;window.RTCPeerConnection=function RTCPeerConnection(pcConfig,pcConstraints){if(pcConfig&&pcConfig.iceServers){var newIceServers=[];for(var i=0;itransceiver.receiver.track.kind==='audio');if(offerOptions.offerToReceiveAudio===false&&audioTransceiver){if(audioTransceiver.direction==='sendrecv'){if(audioTransceiver.setDirection){audioTransceiver.setDirection('sendonly');}else {audioTransceiver.direction='sendonly';}}else if(audioTransceiver.direction==='recvonly'){if(audioTransceiver.setDirection){audioTransceiver.setDirection('inactive');}else {audioTransceiver.direction='inactive';}}}else if(offerOptions.offerToReceiveAudio===true&&!audioTransceiver){this.addTransceiver('audio',{direction:'recvonly'});}if(typeof offerOptions.offerToReceiveVideo!=='undefined'){// support bit values\nofferOptions.offerToReceiveVideo=!!offerOptions.offerToReceiveVideo;}var videoTransceiver=this.getTransceivers().find(transceiver=>transceiver.receiver.track.kind==='video');if(offerOptions.offerToReceiveVideo===false&&videoTransceiver){if(videoTransceiver.direction==='sendrecv'){if(videoTransceiver.setDirection){videoTransceiver.setDirection('sendonly');}else {videoTransceiver.direction='sendonly';}}else if(videoTransceiver.direction==='recvonly'){if(videoTransceiver.setDirection){videoTransceiver.setDirection('inactive');}else {videoTransceiver.direction='inactive';}}}else if(offerOptions.offerToReceiveVideo===true&&!videoTransceiver){this.addTransceiver('video',{direction:'recvonly'});}}return origCreateOffer.apply(this,arguments);};}function shimAudioContext$1(window){if(typeof window!=='object'||window.AudioContext){return;}window.AudioContext=window.webkitAudioContext;}var safariShim$1=/*#__PURE__*/Object.freeze({__proto__:null,shimLocalStreamsAPI:shimLocalStreamsAPI$1,shimRemoteStreamsAPI:shimRemoteStreamsAPI$1,shimCallbacksAPI:shimCallbacksAPI$1,shimGetUserMedia:shimGetUserMedia$3,shimConstraints:shimConstraints$1,shimRTCIceServerUrls:shimRTCIceServerUrls$1,shimTrackEventTransceiver:shimTrackEventTransceiver$1,shimCreateOfferLegacy:shimCreateOfferLegacy$1,shimAudioContext:shimAudioContext$1});var sdp$1$1={exports:{}};/* eslint-env node */(function(module){// SDP helpers.\nvar SDPUtils={};// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier=function(){return Math.random().toString(36).substr(2,10);};// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName=SDPUtils.generateIdentifier();// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines=function(blob){return blob.trim().split('\\n').map(line=>line.trim());};// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections=function(blob){var parts=blob.split('\\nm=');return parts.map((part,index)=>(index>0?'m='+part:part).trim()+'\\r\\n');};// Returns the session description.\nSDPUtils.getDescription=function(blob){var sections=SDPUtils.splitSections(blob);return sections&§ions[0];};// Returns the individual media sections.\nSDPUtils.getMediaSections=function(blob){var sections=SDPUtils.splitSections(blob);sections.shift();return sections;};// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix=function(blob,prefix){return SDPUtils.splitLines(blob).filter(line=>line.indexOf(prefix)===0);};// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate=function(line){var parts;// Parse both variants.\nif(line.indexOf('a=candidate:')===0){parts=line.substring(12).split(' ');}else {parts=line.substring(10).split(' ');}var candidate={foundation:parts[0],component:{1:'rtp',2:'rtcp'}[parts[1]]||parts[1],protocol:parts[2].toLowerCase(),priority:parseInt(parts[3],10),ip:parts[4],address:parts[4],// address is an alias for ip.\nport:parseInt(parts[5],10),// skip parts[6] == 'typ'\ntype:parts[7]};for(var i=8;i0?parts[0].split('/')[1]:'sendrecv',uri:parts[1]};};// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap=function(headerExtension){return 'a=extmap:'+(headerExtension.id||headerExtension.preferredId)+(headerExtension.direction&&headerExtension.direction!=='sendrecv'?'/'+headerExtension.direction:'')+' '+headerExtension.uri+'\\r\\n';};// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp=function(line){var parsed={};var kv;var parts=line.substr(line.indexOf(' ')+1).split(';');for(var j=0;j{if(codec.parameters[param]!==undefined){params.push(param+'='+codec.parameters[param]);}else {params.push(param);}});line+='a=fmtp:'+pt+' '+params.join(';')+'\\r\\n';}return line;};// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb=function(line){var parts=line.substr(line.indexOf(' ')+1).split(' ');return {type:parts.shift(),parameter:parts.join(' ')};};// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb=function(codec){var lines='';var pt=codec.payloadType;if(codec.preferredPayloadType!==undefined){pt=codec.preferredPayloadType;}if(codec.rtcpFeedback&&codec.rtcpFeedback.length){// FIXME: special handling for trr-int?\ncodec.rtcpFeedback.forEach(fb=>{lines+='a=rtcp-fb:'+pt+' '+fb.type+(fb.parameter&&fb.parameter.length?' '+fb.parameter:'')+'\\r\\n';});}return lines;};// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia=function(line){var sp=line.indexOf(' ');var parts={ssrc:parseInt(line.substr(7,sp-7),10)};var colon=line.indexOf(':',sp);if(colon>-1){parts.attribute=line.substr(sp+1,colon-sp-1);parts.value=line.substr(colon+1);}else {parts.attribute=line.substr(sp+1);}return parts;};// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup=function(line){var parts=line.substr(13).split(' ');return {semantics:parts.shift(),ssrcs:parts.map(ssrc=>parseInt(ssrc,10))};};// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid=function(mediaSection){var mid=SDPUtils.matchPrefix(mediaSection,'a=mid:')[0];if(mid){return mid.substr(6);}};// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint=function(line){var parts=line.substr(14).split(' ');return {algorithm:parts[0].toLowerCase(),// algorithm is case-sensitive in Edge.\nvalue:parts[1].toUpperCase()// the definition is upper-case in RFC 4572.\n};};// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters=function(mediaSection,sessionpart){var lines=SDPUtils.matchPrefix(mediaSection+sessionpart,'a=fingerprint:');// Note: a=setup line is ignored since we use the 'auto' role in Edge.\nreturn {role:'auto',fingerprints:lines.map(SDPUtils.parseFingerprint)};};// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters=function(params,setupType){var sdp='a=setup:'+setupType+'\\r\\n';params.fingerprints.forEach(fp=>{sdp+='a=fingerprint:'+fp.algorithm+' '+fp.value+'\\r\\n';});return sdp;};// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine=function(line){var parts=line.substr(9).split(' ');return {tag:parseInt(parts[0],10),cryptoSuite:parts[1],keyParams:parts[2],sessionParams:parts.slice(3)};};SDPUtils.writeCryptoLine=function(parameters){return 'a=crypto:'+parameters.tag+' '+parameters.cryptoSuite+' '+(typeof parameters.keyParams==='object'?SDPUtils.writeCryptoKeyParams(parameters.keyParams):parameters.keyParams)+(parameters.sessionParams?' '+parameters.sessionParams.join(' '):'')+'\\r\\n';};// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams=function(keyParams){if(keyParams.indexOf('inline:')!==0){return null;}var parts=keyParams.substr(7).split('|');return {keyMethod:'inline',keySalt:parts[0],lifeTime:parts[1],mkiValue:parts[2]?parts[2].split(':')[0]:undefined,mkiLength:parts[2]?parts[2].split(':')[1]:undefined};};SDPUtils.writeCryptoKeyParams=function(keyParams){return keyParams.keyMethod+':'+keyParams.keySalt+(keyParams.lifeTime?'|'+keyParams.lifeTime:'')+(keyParams.mkiValue&&keyParams.mkiLength?'|'+keyParams.mkiValue+':'+keyParams.mkiLength:'');};// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters=function(mediaSection,sessionpart){var lines=SDPUtils.matchPrefix(mediaSection+sessionpart,'a=crypto:');return lines.map(SDPUtils.parseCryptoLine);};// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters=function(mediaSection,sessionpart){var ufrag=SDPUtils.matchPrefix(mediaSection+sessionpart,'a=ice-ufrag:')[0];var pwd=SDPUtils.matchPrefix(mediaSection+sessionpart,'a=ice-pwd:')[0];if(!(ufrag&&pwd)){return null;}return {usernameFragment:ufrag.substr(12),password:pwd.substr(10)};};// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters=function(params){var sdp='a=ice-ufrag:'+params.usernameFragment+'\\r\\n'+'a=ice-pwd:'+params.password+'\\r\\n';if(params.iceLite){sdp+='a=ice-lite\\r\\n';}return sdp;};// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters=function(mediaSection){var description={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]};var lines=SDPUtils.splitLines(mediaSection);var mline=lines[0].split(' ');for(var i=3;i is considered.\ncodec.parameters=fmtps.length?SDPUtils.parseFmtp(fmtps[0]):{};codec.rtcpFeedback=SDPUtils.matchPrefix(mediaSection,'a=rtcp-fb:'+pt+' ').map(SDPUtils.parseRtcpFb);description.codecs.push(codec);// parse FEC mechanisms from rtpmap lines.\nswitch(codec.name.toUpperCase()){case'RED':case'ULPFEC':description.fecMechanisms.push(codec.name.toUpperCase());break;}}}SDPUtils.matchPrefix(mediaSection,'a=extmap:').forEach(line=>{description.headerExtensions.push(SDPUtils.parseExtmap(line));});// FIXME: parse rtcp.\nreturn description;};// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription=function(kind,caps){var sdp='';// Build the mline.\nsdp+='m='+kind+' ';sdp+=caps.codecs.length>0?'9':'0';// reject if no codecs.\nsdp+=' UDP/TLS/RTP/SAVPF ';sdp+=caps.codecs.map(codec=>{if(codec.preferredPayloadType!==undefined){return codec.preferredPayloadType;}return codec.payloadType;}).join(' ')+'\\r\\n';sdp+='c=IN IP4 0.0.0.0\\r\\n';sdp+='a=rtcp:9 IN IP4 0.0.0.0\\r\\n';// Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\ncaps.codecs.forEach(codec=>{sdp+=SDPUtils.writeRtpMap(codec);sdp+=SDPUtils.writeFmtp(codec);sdp+=SDPUtils.writeRtcpFb(codec);});var maxptime=0;caps.codecs.forEach(codec=>{if(codec.maxptime>maxptime){maxptime=codec.maxptime;}});if(maxptime>0){sdp+='a=maxptime:'+maxptime+'\\r\\n';}if(caps.headerExtensions){caps.headerExtensions.forEach(extension=>{sdp+=SDPUtils.writeExtmap(extension);});}// FIXME: write fecMechanisms.\nreturn sdp;};// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters=function(mediaSection){var encodingParameters=[];var description=SDPUtils.parseRtpParameters(mediaSection);var hasRed=description.fecMechanisms.indexOf('RED')!==-1;var hasUlpfec=description.fecMechanisms.indexOf('ULPFEC')!==-1;// filter a=ssrc:... cname:, ignore PlanB-msid\nvar ssrcs=SDPUtils.matchPrefix(mediaSection,'a=ssrc:').map(line=>SDPUtils.parseSsrcMedia(line)).filter(parts=>parts.attribute==='cname');var primarySsrc=ssrcs.length>0&&ssrcs[0].ssrc;var secondarySsrc;var flows=SDPUtils.matchPrefix(mediaSection,'a=ssrc-group:FID').map(line=>{var parts=line.substr(17).split(' ');return parts.map(part=>parseInt(part,10));});if(flows.length>0&&flows[0].length>1&&flows[0][0]===primarySsrc){secondarySsrc=flows[0][1];}description.codecs.forEach(codec=>{if(codec.name.toUpperCase()==='RTX'&&codec.parameters.apt){var encParam={ssrc:primarySsrc,codecPayloadType:parseInt(codec.parameters.apt,10)};if(primarySsrc&&secondarySsrc){encParam.rtx={ssrc:secondarySsrc};}encodingParameters.push(encParam);if(hasRed){encParam=JSON.parse(JSON.stringify(encParam));encParam.fec={ssrc:primarySsrc,mechanism:hasUlpfec?'red+ulpfec':'red'};encodingParameters.push(encParam);}}});if(encodingParameters.length===0&&primarySsrc){encodingParameters.push({ssrc:primarySsrc});}// we support both b=AS and b=TIAS but interpret AS as TIAS.\nvar bandwidth=SDPUtils.matchPrefix(mediaSection,'b=');if(bandwidth.length){if(bandwidth[0].indexOf('b=TIAS:')===0){bandwidth=parseInt(bandwidth[0].substr(7),10);}else if(bandwidth[0].indexOf('b=AS:')===0){// use formula from JSEP to convert b=AS to TIAS value.\nbandwidth=parseInt(bandwidth[0].substr(5),10)*1000*0.95-50*40*8;}else {bandwidth=undefined;}encodingParameters.forEach(params=>{params.maxBitrate=bandwidth;});}return encodingParameters;};// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters=function(mediaSection){var rtcpParameters={};// Gets the first SSRC. Note that with RTX there might be multiple\n// SSRCs.\nvar remoteSsrc=SDPUtils.matchPrefix(mediaSection,'a=ssrc:').map(line=>SDPUtils.parseSsrcMedia(line)).filter(obj=>obj.attribute==='cname')[0];if(remoteSsrc){rtcpParameters.cname=remoteSsrc.value;rtcpParameters.ssrc=remoteSsrc.ssrc;}// Edge uses the compound attribute instead of reducedSize\n// compound is !reducedSize\nvar rsize=SDPUtils.matchPrefix(mediaSection,'a=rtcp-rsize');rtcpParameters.reducedSize=rsize.length>0;rtcpParameters.compound=rsize.length===0;// parses the rtcp-mux attrÑ–bute.\n// Note that Edge does not support unmuxed RTCP.\nvar mux=SDPUtils.matchPrefix(mediaSection,'a=rtcp-mux');rtcpParameters.mux=mux.length>0;return rtcpParameters;};SDPUtils.writeRtcpParameters=function(rtcpParameters){var sdp='';if(rtcpParameters.reducedSize){sdp+='a=rtcp-rsize\\r\\n';}if(rtcpParameters.mux){sdp+='a=rtcp-mux\\r\\n';}if(rtcpParameters.ssrc!==undefined&&rtcpParameters.cname){sdp+='a=ssrc:'+rtcpParameters.ssrc+' cname:'+rtcpParameters.cname+'\\r\\n';}return sdp;};// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid=function(mediaSection){var parts;var spec=SDPUtils.matchPrefix(mediaSection,'a=msid:');if(spec.length===1){parts=spec[0].substr(7).split(' ');return {stream:parts[0],track:parts[1]};}var planB=SDPUtils.matchPrefix(mediaSection,'a=ssrc:').map(line=>SDPUtils.parseSsrcMedia(line)).filter(msidParts=>msidParts.attribute==='msid');if(planB.length>0){parts=planB[0].value.split(' ');return {stream:parts[0],track:parts[1]};}};// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription=function(mediaSection){var mline=SDPUtils.parseMLine(mediaSection);var maxSizeLine=SDPUtils.matchPrefix(mediaSection,'a=max-message-size:');var maxMessageSize;if(maxSizeLine.length>0){maxMessageSize=parseInt(maxSizeLine[0].substr(19),10);}if(isNaN(maxMessageSize)){maxMessageSize=65536;}var sctpPort=SDPUtils.matchPrefix(mediaSection,'a=sctp-port:');if(sctpPort.length>0){return {port:parseInt(sctpPort[0].substr(12),10),protocol:mline.fmt,maxMessageSize};}var sctpMapLines=SDPUtils.matchPrefix(mediaSection,'a=sctpmap:');if(sctpMapLines.length>0){var parts=sctpMapLines[0].substr(10).split(' ');return {port:parseInt(parts[0],10),protocol:parts[1],maxMessageSize};}};// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription=function(media,sctp){var output=[];if(media.protocol!=='DTLS/SCTP'){output=['m='+media.kind+' 9 '+media.protocol+' '+sctp.protocol+'\\r\\n','c=IN IP4 0.0.0.0\\r\\n','a=sctp-port:'+sctp.port+'\\r\\n'];}else {output=['m='+media.kind+' 9 '+media.protocol+' '+sctp.port+'\\r\\n','c=IN IP4 0.0.0.0\\r\\n','a=sctpmap:'+sctp.port+' '+sctp.protocol+' 65535\\r\\n'];}if(sctp.maxMessageSize!==undefined){output.push('a=max-message-size:'+sctp.maxMessageSize+'\\r\\n');}return output.join('');};// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId=function(){return Math.random().toString().substr(2,21);};// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate=function(sessId,sessVer,sessUser){var sessionId;var version=sessVer!==undefined?sessVer:2;if(sessId){sessionId=sessId;}else {sessionId=SDPUtils.generateSessionId();}var user=sessUser||'thisisadapterortc';// FIXME: sess-id should be an NTP timestamp.\nreturn 'v=0\\r\\n'+'o='+user+' '+sessionId+' '+version+' IN IP4 127.0.0.1\\r\\n'+'s=-\\r\\n'+'t=0 0\\r\\n';};// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection=function(mediaSection,sessionpart){// Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\nvar lines=SDPUtils.splitLines(mediaSection);for(var i=0;i{if(e.candidate){Object.defineProperty(e,'candidate',{value:new window.RTCIceCandidate(e.candidate),writable:'false'});}return e;});}function shimMaxMessageSize$1(window,browserDetails){if(!window.RTCPeerConnection){return;}if(!('sctp'in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,'sctp',{get(){return typeof this._sctp==='undefined'?null:this._sctp;}});}var sctpInDescription=function sctpInDescription(description){if(!description||!description.sdp){return false;}var sections=SDPUtils$1.splitSections(description.sdp);sections.shift();return sections.some(mediaSection=>{var mLine=SDPUtils$1.parseMLine(mediaSection);return mLine&&mLine.kind==='application'&&mLine.protocol.indexOf('SCTP')!==-1;});};var getRemoteFirefoxVersion=function getRemoteFirefoxVersion(description){// TODO: Is there a better solution for detecting Firefox?\nvar match=description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);if(match===null||match.length<2){return -1;}var version=parseInt(match[1],10);// Test for NaN (yes, this is ugly)\nreturn version!==version?-1:version;};var getCanSendMaxMessageSize=function getCanSendMaxMessageSize(remoteIsFirefox){// Every implementation we know can send at least 64 KiB.\n// Note: Although Chrome is technically able to send up to 256 KiB, the\n// data does not reach the other peer reliably.\n// See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\nvar canSendMaxMessageSize=65536;if(browserDetails.browser==='firefox'){if(browserDetails.version<57){if(remoteIsFirefox===-1){// FF < 57 will send in 16 KiB chunks using the deprecated PPID\n// fragmentation.\ncanSendMaxMessageSize=16384;}else {// However, other FF (and RAWRTC) can reassemble PPID-fragmented\n// messages. Thus, supporting ~2 GiB when sending.\ncanSendMaxMessageSize=2147483637;}}else if(browserDetails.version<60){// Currently, all FF >= 57 will reset the remote maximum message size\n// to the default value when a data channel is created at a later\n// stage. :(\n// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\ncanSendMaxMessageSize=browserDetails.version===57?65535:65536;}else {// FF >= 60 supports sending ~2 GiB\ncanSendMaxMessageSize=2147483637;}}return canSendMaxMessageSize;};var getMaxMessageSize=function getMaxMessageSize(description,remoteIsFirefox){// Note: 65536 bytes is the default value from the SDP spec. Also,\n// every implementation we know supports receiving 65536 bytes.\nvar maxMessageSize=65536;// FF 57 has a slightly incorrect default remote max message size, so\n// we need to adjust it here to avoid a failure when sending.\n// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\nif(browserDetails.browser==='firefox'&&browserDetails.version===57){maxMessageSize=65535;}var match=SDPUtils$1.matchPrefix(description.sdp,'a=max-message-size:');if(match.length>0){maxMessageSize=parseInt(match[0].substr(19),10);}else if(browserDetails.browser==='firefox'&&remoteIsFirefox!==-1){// If the maximum message size is not present in the remote SDP and\n// both local and remote are Firefox, the remote peer can receive\n// ~2 GiB.\nmaxMessageSize=2147483637;}return maxMessageSize;};var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function setRemoteDescription(){this._sctp=null;// Chrome decided to not expose .sctp in plan-b mode.\n// As usual, adapter.js has to do an 'ugly worakaround'\n// to cover up the mess.\nif(browserDetails.browser==='chrome'&&browserDetails.version>=76){var{sdpSemantics}=this.getConfiguration();if(sdpSemantics==='plan-b'){Object.defineProperty(this,'sctp',{get(){return typeof this._sctp==='undefined'?null:this._sctp;},enumerable:true,configurable:true});}}if(sctpInDescription(arguments[0])){// Check if the remote is FF.\nvar isFirefox=getRemoteFirefoxVersion(arguments[0]);// Get the maximum message size the local peer is capable of sending\nvar canSendMMS=getCanSendMaxMessageSize(isFirefox);// Get the maximum message size of the remote peer.\nvar remoteMMS=getMaxMessageSize(arguments[0],isFirefox);// Determine final maximum message size\nvar maxMessageSize;if(canSendMMS===0&&remoteMMS===0){maxMessageSize=Number.POSITIVE_INFINITY;}else if(canSendMMS===0||remoteMMS===0){maxMessageSize=Math.max(canSendMMS,remoteMMS);}else {maxMessageSize=Math.min(canSendMMS,remoteMMS);}// Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n// attribute.\nvar sctp={};Object.defineProperty(sctp,'maxMessageSize',{get(){return maxMessageSize;}});this._sctp=sctp;}return origSetRemoteDescription.apply(this,arguments);};}function shimSendThrowTypeError$1(window){if(!(window.RTCPeerConnection&&'createDataChannel'in window.RTCPeerConnection.prototype)){return;}// Note: Although Firefox >= 57 has a native implementation, the maximum\n// message size can be reset for all data channels at a later stage.\n// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\nfunction wrapDcSend(dc,pc){var origDataChannelSend=dc.send;dc.send=function send(){var data=arguments[0];var length=data.length||data.size||data.byteLength;if(dc.readyState==='open'&&pc.sctp&&length>pc.sctp.maxMessageSize){throw new TypeError('Message too large (can send a maximum of '+pc.sctp.maxMessageSize+' bytes)');}return origDataChannelSend.apply(dc,arguments);};}var origCreateDataChannel=window.RTCPeerConnection.prototype.createDataChannel;window.RTCPeerConnection.prototype.createDataChannel=function createDataChannel(){var dataChannel=origCreateDataChannel.apply(this,arguments);wrapDcSend(dataChannel,this);return dataChannel;};wrapPeerConnectionEvent$1(window,'datachannel',e=>{wrapDcSend(e.channel,e.target);return e;});}/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */function shimConnectionState$1(window){if(!window.RTCPeerConnection||'connectionState'in window.RTCPeerConnection.prototype){return;}var proto=window.RTCPeerConnection.prototype;Object.defineProperty(proto,'connectionState',{get(){return {completed:'connected',checking:'connecting'}[this.iceConnectionState]||this.iceConnectionState;},enumerable:true,configurable:true});Object.defineProperty(proto,'onconnectionstatechange',{get(){return this._onconnectionstatechange||null;},set(cb){if(this._onconnectionstatechange){this.removeEventListener('connectionstatechange',this._onconnectionstatechange);delete this._onconnectionstatechange;}if(cb){this.addEventListener('connectionstatechange',this._onconnectionstatechange=cb);}},enumerable:true,configurable:true});['setLocalDescription','setRemoteDescription'].forEach(method=>{var origMethod=proto[method];proto[method]=function(){if(!this._connectionstatechangepoly){this._connectionstatechangepoly=e=>{var pc=e.target;if(pc._lastConnectionState!==pc.connectionState){pc._lastConnectionState=pc.connectionState;var newEvent=new Event('connectionstatechange',e);pc.dispatchEvent(newEvent);}return e;};this.addEventListener('iceconnectionstatechange',this._connectionstatechangepoly);}return origMethod.apply(this,arguments);};});}function removeExtmapAllowMixed$1(window,browserDetails){/* remove a=extmap-allow-mixed for webrtc.org < M71 */if(!window.RTCPeerConnection){return;}if(browserDetails.browser==='chrome'&&browserDetails.version>=71){return;}if(browserDetails.browser==='safari'&&browserDetails.version>=605){return;}var nativeSRD=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function setRemoteDescription(desc){if(desc&&desc.sdp&&desc.sdp.indexOf('\\na=extmap-allow-mixed')!==-1){var _sdp=desc.sdp.split('\\n').filter(line=>{return line.trim()!=='a=extmap-allow-mixed';}).join('\\n');// Safari enforces read-only-ness of RTCSessionDescription fields.\nif(window.RTCSessionDescription&&desc instanceof window.RTCSessionDescription){arguments[0]=new window.RTCSessionDescription({type:desc.type,sdp:_sdp});}else {desc.sdp=_sdp;}}return nativeSRD.apply(this,arguments);};}function shimAddIceCandidateNullOrEmpty$1(window,browserDetails){// Support for addIceCandidate(null or undefined)\n// as well as addIceCandidate({candidate: \"\", ...})\n// https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n// Note: must be called before other polyfills which change the signature.\nif(!(window.RTCPeerConnection&&window.RTCPeerConnection.prototype)){return;}var nativeAddIceCandidate=window.RTCPeerConnection.prototype.addIceCandidate;if(!nativeAddIceCandidate||nativeAddIceCandidate.length===0){return;}window.RTCPeerConnection.prototype.addIceCandidate=function addIceCandidate(){if(!arguments[0]){if(arguments[1]){arguments[1].apply(null);}return Promise.resolve();}// Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n// in older versions.\n// Native support for ignoring exists for Chrome M77+.\n// Safari ignores as well, exact version unknown but works in the same\n// version that also ignores addIceCandidate(null).\nif((browserDetails.browser==='chrome'&&browserDetails.version<78||browserDetails.browser==='firefox'&&browserDetails.version<68||browserDetails.browser==='safari')&&arguments[0]&&arguments[0].candidate===''){return Promise.resolve();}return nativeAddIceCandidate.apply(this,arguments);};}// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nfunction shimParameterlessSetLocalDescription$1(window,browserDetails){if(!(window.RTCPeerConnection&&window.RTCPeerConnection.prototype)){return;}var nativeSetLocalDescription=window.RTCPeerConnection.prototype.setLocalDescription;if(!nativeSetLocalDescription||nativeSetLocalDescription.length===0){return;}window.RTCPeerConnection.prototype.setLocalDescription=function setLocalDescription(){var desc=arguments[0]||{};if(typeof desc!=='object'||desc.type&&desc.sdp){return nativeSetLocalDescription.apply(this,arguments);}// The remaining steps should technically happen when SLD comes off the\n// RTCPeerConnection's operations chain (not ahead of going on it), but\n// this is too difficult to shim. Instead, this shim only covers the\n// common case where the operations chain is empty. This is imperfect, but\n// should cover many cases. Rationale: Even if we can't reduce the glare\n// window to zero on imperfect implementations, there's value in tapping\n// into the perfect negotiation pattern that several browsers support.\ndesc={type:desc.type,sdp:desc.sdp};if(!desc.type){switch(this.signalingState){case'stable':case'have-local-offer':case'have-remote-pranswer':desc.type='offer';break;default:desc.type='answer';break;}}if(desc.sdp||desc.type!=='offer'&&desc.type!=='answer'){return nativeSetLocalDescription.apply(this,[desc]);}var func=desc.type==='offer'?this.createOffer:this.createAnswer;return func.apply(this).then(d=>nativeSetLocalDescription.apply(this,[d]));};}var commonShim$1=/*#__PURE__*/Object.freeze({__proto__:null,shimRTCIceCandidate:shimRTCIceCandidate$1,shimMaxMessageSize:shimMaxMessageSize$1,shimSendThrowTypeError:shimSendThrowTypeError$1,shimConnectionState:shimConnectionState$1,removeExtmapAllowMixed:removeExtmapAllowMixed$1,shimAddIceCandidateNullOrEmpty:shimAddIceCandidateNullOrEmpty$1,shimParameterlessSetLocalDescription:shimParameterlessSetLocalDescription$1});/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */ // Shimming starts here.\nfunction adapterFactory$1(){var{window}=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{shimChrome:true,shimFirefox:true,shimSafari:true};// Utils.\nvar logging=log$2;var browserDetails=detectBrowser$1(window);var adapter={browserDetails,commonShim: commonShim$1,extractVersion:extractVersion$1,disableLog:disableLog$1,disableWarnings:disableWarnings$1,// Expose sdp as a convenience. For production apps include directly.\nsdp: sdp$2};// Shim browser if found.\nswitch(browserDetails.browser){case'chrome':if(!chromeShim$1||!shimPeerConnection$1$1||!options.shimChrome){logging('Chrome shim is not included in this adapter release.');return adapter;}if(browserDetails.version===null){logging('Chrome shim can not determine version, not shimming.');return adapter;}logging('adapter.js shimming chrome.');// Export to the adapter global object visible in the browser.\nadapter.browserShim=chromeShim$1;// Must be called before shimPeerConnection.\nshimAddIceCandidateNullOrEmpty$1(window,browserDetails);shimParameterlessSetLocalDescription$1(window);shimGetUserMedia$2$1(window,browserDetails);shimMediaStream$1(window);shimPeerConnection$1$1(window,browserDetails);shimOnTrack$1$1(window);shimAddTrackRemoveTrack$1(window,browserDetails);shimGetSendersWithDtmf$1(window);shimGetStats$1(window);shimSenderReceiverGetStats$1(window);fixNegotiationNeeded$1(window,browserDetails);shimRTCIceCandidate$1(window);shimConnectionState$1(window);shimMaxMessageSize$1(window,browserDetails);shimSendThrowTypeError$1(window);removeExtmapAllowMixed$1(window,browserDetails);break;case'firefox':if(!firefoxShim$1||!shimPeerConnection$2||!options.shimFirefox){logging('Firefox shim is not included in this adapter release.');return adapter;}logging('adapter.js shimming firefox.');// Export to the adapter global object visible in the browser.\nadapter.browserShim=firefoxShim$1;// Must be called before shimPeerConnection.\nshimAddIceCandidateNullOrEmpty$1(window,browserDetails);shimParameterlessSetLocalDescription$1(window);shimGetUserMedia$1$1(window,browserDetails);shimPeerConnection$2(window,browserDetails);shimOnTrack$2(window);shimRemoveStream$1(window);shimSenderGetStats$1(window);shimReceiverGetStats$1(window);shimRTCDataChannel$1(window);shimAddTransceiver$1(window);shimGetParameters$1(window);shimCreateOffer$1(window);shimCreateAnswer$1(window);shimRTCIceCandidate$1(window);shimConnectionState$1(window);shimMaxMessageSize$1(window,browserDetails);shimSendThrowTypeError$1(window);break;case'safari':if(!safariShim$1||!options.shimSafari){logging('Safari shim is not included in this adapter release.');return adapter;}logging('adapter.js shimming safari.');// Export to the adapter global object visible in the browser.\nadapter.browserShim=safariShim$1;// Must be called before shimCallbackAPI.\nshimAddIceCandidateNullOrEmpty$1(window,browserDetails);shimParameterlessSetLocalDescription$1(window);shimRTCIceServerUrls$1(window);shimCreateOfferLegacy$1(window);shimCallbacksAPI$1(window);shimLocalStreamsAPI$1(window);shimRemoteStreamsAPI$1(window);shimTrackEventTransceiver$1(window);shimGetUserMedia$3(window);shimAudioContext$1(window);shimRTCIceCandidate$1(window);shimMaxMessageSize$1(window,browserDetails);shimSendThrowTypeError$1(window);removeExtmapAllowMixed$1(window,browserDetails);break;default:logging('Unsupported browser!');break;}return adapter;}/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */adapterFactory$1({window:typeof window==='undefined'?undefined:window});/**\n * Creates an RTCPeerConnection.\n *\n * @param configuration - Config to the RTCPeerConnection constructor.\n * @returns An RTCPeerConnection instance.\n */function createRTCPeerConnection(configuration){return new RTCPeerConnection(configuration);}/**\n * A type-safe form of the DOMString used in the MediaStreamTrack.kind field.\n */var MediaStreamTrackKind;(function(MediaStreamTrackKind){MediaStreamTrackKind[\"Audio\"]=\"audio\";MediaStreamTrackKind[\"Video\"]=\"video\";})(MediaStreamTrackKind||(MediaStreamTrackKind={}));var PeerConnectionEvents;(function(PeerConnectionEvents){PeerConnectionEvents[\"IceGatheringStateChange\"]=\"icegatheringstatechange\";PeerConnectionEvents[\"IceCandidate\"]=\"icecandidate\";PeerConnectionEvents[\"IceCandidateError\"]=\"icecandidateerror\";PeerConnectionEvents[\"PeerConnectionStateChange\"]=\"peerconnectionstatechange\";PeerConnectionEvents[\"IceConnectionStateChange\"]=\"iceconnectionstatechange\";PeerConnectionEvents[\"CreateOfferOnSuccess\"]=\"createofferonsuccess\";PeerConnectionEvents[\"CreateAnswerOnSuccess\"]=\"createansweronsuccess\";PeerConnectionEvents[\"SetLocalDescriptionOnSuccess\"]=\"setlocaldescriptiononsuccess\";PeerConnectionEvents[\"SetRemoteDescriptionOnSuccess\"]=\"setremotedescriptiononsuccess\";})(PeerConnectionEvents||(PeerConnectionEvents={}));/**\n * Manages a single RTCPeerConnection with the server.\n */class PeerConnection extends EventEmitter$4{/**\n * Creates an instance of the RTCPeerConnection.\n *\n * @param configuration - Config to the RTCPeerConnection constructor.\n */constructor(configuration){super();logger$3.log('PeerConnection init');this.pc=createRTCPeerConnection(configuration);this.connectionStateHandler=new ConnectionStateHandler(()=>{return {connectionState:this.pc.connectionState,iceState:this.pc.iceConnectionState};});this.connectionStateHandler.on(ConnectionStateHandler.Events.PeerConnectionStateChanged,state=>{this.emit(PeerConnection.Events.PeerConnectionStateChange,state);});this.connectionStateHandler.on(ConnectionStateHandler.Events.IceConnectionStateChanged,state=>{this.emit(PeerConnection.Events.IceConnectionStateChange,state);});// Forward the connection state related events to connection state handler\n// eslint-disable-next-line jsdoc/require-jsdoc\nthis.pc.oniceconnectionstatechange=()=>this.connectionStateHandler.onIceConnectionStateChange();// eslint-disable-next-line jsdoc/require-jsdoc\nthis.pc.onconnectionstatechange=()=>this.connectionStateHandler.onPeerConnectionStateChange();// Subscribe to underlying PeerConnection events and emit them via the EventEmitter\n/* eslint-disable jsdoc/require-jsdoc */this.pc.onicegatheringstatechange=ev=>{this.emit(PeerConnection.Events.IceGatheringStateChange,ev);};/* eslint-disable jsdoc/require-jsdoc */this.pc.onicecandidate=ev=>{this.emit(PeerConnection.Events.IceCandidate,ev);};this.pc.onicecandidateerror=ev=>{this.emit(PeerConnection.Events.IceCandidateError,ev);};}/**\n * Get the underlying RTCPeerConnection.\n *\n * @returns The underlying RTCPeerConnection.\n */getUnderlyingRTCPeerConnection(){return this.pc;}/**\n * Gets the overall connection state of the underlying RTCPeerConnection.\n *\n * @returns The underlying connection's overall state.\n */getConnectionState(){return this.connectionStateHandler.getConnectionState();}/**\n * Gets the connection state of the underlying RTCPeerConnection.\n *\n * @returns The underlying RTCPeerConnection connection state.\n */getPeerConnectionState(){return this.connectionStateHandler.getPeerConnectionState();}/**\n * Gets the ICE connection state of the underlying RTCPeerConnection.\n *\n * @returns The underlying RTCPeerConnection ICE connection state.\n */getIceConnectionState(){return this.connectionStateHandler.getIceConnectionState();}/**\n * Adds a new media track to the set of tracks which will be transmitted to the other peer.\n *\n * @param track - A MediaStreamTrack object representing the media track to add to the peer connection.\n * @param streams - (Optional) One or more local MediaStream objects to which the track should be\n * added.\n * @returns The RTCRtpSender object which will be used to transmit the media data, or null if\n * there is no underlying track when a track is added.\n */addTrack(track){for(var _len3=arguments.length,streams=new Array(_len3>1?_len3-1:0),_key3=1;_key3<_len3;_key3++){streams[_key3-1]=arguments[_key3];}return this.pc.addTrack(track,...streams);}/**\n * Creates a new RTCRtpTransceiver and adds it to the set of transceivers associated with the\n * PeerConnection. Each transceiver represents a bidirectional stream, with both an RTCRtpSender\n * and an RTCRtpReceiver associated with it.\n *\n * @param trackOrKind - A MediaStreamTrack to associate with the transceiver, or a string which is used\n * as the kind of the receiver's track, and by extension the RTCRtpReceiver itself.\n * @param init - Options that you may wish to specify when creating the new transceiver.\n * @returns - The created RTCRtpTransceiver object.\n */addTransceiver(trackOrKind,init){return this.pc.addTransceiver(trackOrKind,init);}/**\n * Tell the local end of the connection to stop sending media from the specified track, without\n * actually removing the corresponding RTCRtpSender from the list of senders as reported by\n * RTCPeerConnection.getSenders(). If the track is already stopped, or is not in the connection's\n * senders list, the method has no effect.\n *\n * If the connection has already been negotiated (signalingState is set to 'stable'), it is marked\n * as needing to be negotiated again; the remote peer won't experience the change until this\n * negotiation occurs. A negotiatedneeded event is sent to the RTCPeerConnection to let the local\n * end know this negotiation must occur.\n *\n * @param sender - An RTCRtpSender specifying the sender to remove from the connection.\n */removeTrack(sender){this.pc.removeTrack(sender);}/**\n * Creates a new data channel linked with the remote peer.\n *\n * @param label - A human-readable name for the channel. May not be longer than 65,535 bytes.\n * @param options - An object providing configuration options for the data channel.\n * @returns An RTCDataChannel object.\n */createDataChannel(label,options){return this.pc.createDataChannel(label,options);}/**\n * Creates an SDP answer to an offer received from a remote peer during the offer/answer\n * negotiation of a WebRTC connection.\n *\n * @param options - (Optional) An object which contains options which customize the answer; this\n * is based on the RTCAnswerOptions dictionary.\n * @returns A Promise whose fulfillment handler is called with an object conforming to the\n * RTCSessionDescriptionInit dictionary which contains the SDP answer to be delivered to the\n * other peer.\n */createAnswer(options){return __awaiter$2(this,void 0,void 0,function*(){return this.pc.createAnswer(options).then(answer=>{this.emit(PeerConnection.Events.CreateAnswerOnSuccess,answer);return answer;});});}/**\n * Initiates the creation of an SDP offer for the purpose of starting a new WebRTC connection to a\n * remote peer.\n *\n * @param options - (Optional) An RTCOfferOptions dictionary providing options requested for the\n * offer.\n * @returns A Promise whose fulfillment handler will receive an object conforming to the\n * RTCSessionDescriptionInit dictionary which contains the SDP describing the generated offer.\n * That received offer should be delivered through the signaling server to a remote peer.\n */createOffer(options){return __awaiter$2(this,void 0,void 0,function*(){return this.pc.createOffer(options).then(offer=>{this.emit(PeerConnection.Events.CreateOfferOnSuccess,offer);return offer;});});}/**\n * Changes the local description associated with the connection.\n *\n * @param description - An RTCSessionDescriptionInit or RTCSessionDescription which specifies the\n * configuration to be applied to the local end of the connection.\n * @returns A Promise which is fulfilled once the value of RTCPeerConnection.localDescription is\n * successfully changed or rejected if the change cannot be applied.\n */setLocalDescription(description){return __awaiter$2(this,void 0,void 0,function*(){var _a;// In Firefox, setLocalDescription will not throw an error if an m-line has no codecs, even\n// though it violates https://datatracker.ietf.org/doc/html/rfc8866. See\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1857612. So, we check the media lines here to\n// preemptively throw an error on Firefox.\nif(BrowserInfo$1.isFirefox()){(_a=description===null||description===void 0?void 0:description.sdp)===null||_a===void 0?void 0:_a.split(/(\\r\\n|\\r|\\n)/).filter(line=>line.startsWith('m')).forEach(mediaLine=>{if(mediaLine.trim().split(' ').length<4){throw new Error(\"Invalid media line \".concat(mediaLine,\", expected at least 4 fields\"));}});}return this.pc.setLocalDescription(description).then(()=>{if(description){this.emit(PeerConnection.Events.SetLocalDescriptionOnSuccess,description);}});});}/**\n * Sets the specified session description as the remote peer's current offer or answer.\n *\n * @param description - An RTCSessionDescriptionInit or RTCSessionDescription which specifies the\n * remote peer's current offer or answer.\n * @returns A Promise which is fulfilled once the value of the connection's remoteDescription is\n * successfully changed or rejected if the change cannot be applied (for example, if the\n * specified description is incompatible with one or both of the peers on the connection).\n */setRemoteDescription(description){return __awaiter$2(this,void 0,void 0,function*(){return this.pc.setRemoteDescription(description).then(()=>{this.emit(PeerConnection.Events.SetRemoteDescriptionOnSuccess,description);});});}/**\n * Closes the current peer connection.\n */close(){this.pc.close();}/**\n * Get the local description from this PeerConnection.\n *\n * @returns An RTCSessionDescription representing the local description, or null if none has been set.\n */getLocalDescription(){return this.pc.localDescription;}/**\n * Get the remote description from this PeerConnection.\n *\n * @returns An RTCSessionDescription representing the remote description, or null if none has been set.\n */getRemoteDescription(){return this.pc.remoteDescription;}/**\n * Returns an array of RTCRtpSender objects, each of which represents the RTP sender responsible\n * for transmitting one track's data. A sender object provides methods and properties for\n * examining and controlling the encoding and transmission of the track's data.\n *\n * @returns An array of RTCRtpSender objects, one for each track on the connection. The array is\n * empty if there are no RTP senders on the connection.\n */getSenders(){return this.pc.getSenders();}/**\n * Get the list of RTCRtpTransceiver objects being used to send and receive data on the\n * connection.\n *\n * @returns - An array of the RTCRtpTransceiver objects representing the transceivers handling\n * sending and receiving all media on the PeerConnection. The list is in the order in which the\n * transceivers were added to the connection.\n */getTransceivers(){return this.pc.getTransceivers();}/**\n * Get statistics about either the overall connection or about the specified MediaStreamTrack.\n *\n * @param selector - An optional MediaStreamTrack for which to gather statistics. If not provided,\n * statistics will be gathered for the entire underlying RTCPeerConnection.\n * @returns - A Promise which resolves with an RTCStatsReport object providing connection\n * statistics.\n */getStats(selector){return this.pc.getStats(selector);}/**\n * Returns a string that describes the connections' ICE gathering state.\n *\n * @returns - The ICE gathering state.\n */get iceGatheringState(){return this.pc.iceGatheringState;}/**\n * Returns the type of a connection that has been established.\n *\n * @returns The connection type which would be `ConnectionType`.\n */getCurrentConnectionType(){return __awaiter$2(this,void 0,void 0,function*(){var _a;// make sure this method only can be called when the ice connection is established;\nvar isIceConnected=this.pc.iceConnectionState==='connected'||this.pc.iceConnectionState==='completed';if(!isIceConnected){throw new Error('Ice connection is not established');}var succeededLocalCandidateIds=new Set();// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar localCandidateStatsReports=[];(yield this.pc.getStats()).forEach(report=>{var _a;// collect all local candidate ids from `candidate-pair` stats reports with `succeeded` state.\nif(report.type==='candidate-pair'&&((_a=report.state)===null||_a===void 0?void 0:_a.toLowerCase())==='succeeded'){succeededLocalCandidateIds.add(report.localCandidateId);}// collect all `local-candidate` stats.\nif(report.type==='local-candidate'){localCandidateStatsReports.push(report);}});// find the `local-candidate` stats which report id contains in `succeededLocalCandidateIds`.\nvar localCandidate=localCandidateStatsReports.find(report=>succeededLocalCandidateIds.has(report.id));if(!localCandidate){return 'unknown';}if(localCandidate.relayProtocol){return \"TURN-\".concat(localCandidate.relayProtocol.toUpperCase());}return (_a=localCandidate.protocol)===null||_a===void 0?void 0:_a.toUpperCase();});}}PeerConnection.Events=PeerConnectionEvents;var commonjsGlobal$2=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};var logger$2={exports:{}};/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */(function(module){(function(global){// Top level module for the global, static logger instance.\nvar Logger={};// For those that are at home that are keeping score.\nLogger.VERSION=\"1.6.1\";// Function which handles all incoming log messages.\nvar logHandler;// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\nvar contextualLoggersByNameMap={};// Polyfill for ES5's Function.bind.\nvar bind=function bind(scope,func){return function(){return func.apply(scope,arguments);};};// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\nvar merge=function merge(){var args=arguments,target=args[0],key,i;for(i=1;i=filterLevel.value;},trace:function trace(){this.invoke(Logger.TRACE,arguments);},debug:function debug(){this.invoke(Logger.DEBUG,arguments);},info:function info(){this.invoke(Logger.INFO,arguments);},warn:function warn(){this.invoke(Logger.WARN,arguments);},error:function error(){this.invoke(Logger.ERROR,arguments);},time:function time(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'start']);}},timeEnd:function timeEnd(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'end']);}},// Invokes the logger callback if it's not being filtered.\ninvoke:function invoke(level,msgArgs){if(logHandler&&this.enabledFor(level)){logHandler(msgArgs,merge({level:level},this.context));}}};// Protected instance which all calls to the to level `Logger` module will be routed through.\nvar globalLogger=new ContextualLogger({filterLevel:Logger.OFF});// Configure the global Logger instance.\n(function(){// Shortcut for optimisers.\nvar L=Logger;L.enabledFor=bind(globalLogger,globalLogger.enabledFor);L.trace=bind(globalLogger,globalLogger.trace);L.debug=bind(globalLogger,globalLogger.debug);L.time=bind(globalLogger,globalLogger.time);L.timeEnd=bind(globalLogger,globalLogger.timeEnd);L.info=bind(globalLogger,globalLogger.info);L.warn=bind(globalLogger,globalLogger.warn);L.error=bind(globalLogger,globalLogger.error);// Don't forget the convenience alias!\nL.log=L.info;})();// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\n// object with the supplied log messages and the second being a context object which contains a hash of stateful\n// parameters which the logging function can consume.\nLogger.setHandler=function(func){logHandler=func;};// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\n// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\nLogger.setLevel=function(level){// Set the globalLogger's level.\nglobalLogger.setLevel(level);// Apply this level to all registered contextual loggers.\nfor(var key in contextualLoggersByNameMap){if(contextualLoggersByNameMap.hasOwnProperty(key)){contextualLoggersByNameMap[key].setLevel(level);}}};// Gets the global logging filter level\nLogger.getLevel=function(){return globalLogger.getLevel();};// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\n// default context and log handler.\nLogger.get=function(name){// All logger instances are cached so they can be configured ahead of use.\nreturn contextualLoggersByNameMap[name]||(contextualLoggersByNameMap[name]=new ContextualLogger(merge({name:name},globalLogger.context)));};// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\n// write to the window's console object (if present); the optional options object can be used to customise the\n// formatter used to format each log message.\nLogger.createDefaultHandler=function(options){options=options||{};options.formatter=options.formatter||function defaultMessageFormatter(messages,context){// Prepend the logger's name to the log message for easy identification.\nif(context.name){messages.unshift(\"[\"+context.name+\"]\");}};// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\n// that don't offer a native console method.\nvar timerStartTimeByLabelMap={};// Support for IE8+ (and other, slightly more sane environments)\nvar invokeConsoleMethod=function invokeConsoleMethod(hdlr,messages){Function.prototype.apply.call(hdlr,console,messages);};// Check for the presence of a logger.\nif(typeof console===\"undefined\"){return function(){/* no console */};}return function(messages,context){// Convert arguments object to Array.\nmessages=Array.prototype.slice.call(messages);var hdlr=console.log;var timerLabel;if(context.level===Logger.TIME){timerLabel=(context.name?'['+context.name+'] ':'')+messages[0];if(messages[1]==='start'){if(console.time){console.time(timerLabel);}else {timerStartTimeByLabelMap[timerLabel]=new Date().getTime();}}else {if(console.timeEnd){console.timeEnd(timerLabel);}else {invokeConsoleMethod(hdlr,[timerLabel+': '+(new Date().getTime()-timerStartTimeByLabelMap[timerLabel])+'ms']);}}}else {// Delegate through to custom warn/error loggers if present on the console.\nif(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context.level===Logger.ERROR&&console.error){hdlr=console.error;}else if(context.level===Logger.INFO&&console.info){hdlr=console.info;}else if(context.level===Logger.DEBUG&&console.debug){hdlr=console.debug;}else if(context.level===Logger.TRACE&&console.trace){hdlr=console.trace;}options.formatter(messages,context);invokeConsoleMethod(hdlr,messages);}};};// Configure and example a Default implementation which writes to the `window.console` (if present). The\n// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\nLogger.useDefaults=function(options){Logger.setLevel(options&&options.defaultLevel||Logger.DEBUG);Logger.setHandler(Logger.createDefaultHandler(options));};// Createa an alias to useDefaults to avoid reaking a react-hooks rule.\nLogger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.\nif(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$2);})(logger$2);var Logger$1=logger$2.exports;Logger$1.useDefaults({defaultLevel:Logger$1.DEBUG,formatter:(messages,context)=>{messages.unshift(\"[\".concat(context.name,\"] \"));}});function areNamedMediaGroupsEqual(left,right){return left.type===right.type&&left.value===right.value;}var MediaFamily;(function(MediaFamily){MediaFamily[\"Audio\"]=\"AUDIO\";MediaFamily[\"Video\"]=\"VIDEO\";})(MediaFamily||(MediaFamily={}));var MediaContent;(function(MediaContent){MediaContent[\"Main\"]=\"MAIN\";MediaContent[\"Slides\"]=\"SLIDES\";})(MediaContent||(MediaContent={}));var Policy;(function(Policy){Policy[\"ActiveSpeaker\"]=\"active-speaker\";Policy[\"ReceiverSelected\"]=\"receiver-selected\";})(Policy||(Policy={}));var MediaType;(function(MediaType){MediaType[\"VideoMain\"]=\"VIDEO-MAIN\";MediaType[\"VideoSlides\"]=\"VIDEO-SLIDES\";MediaType[\"AudioMain\"]=\"AUDIO-MAIN\";MediaType[\"AudioSlides\"]=\"AUDIO-SLIDES\";})(MediaType||(MediaType={}));function randomInteger(min,max){return Math.floor(Math.random()*(max-min+1))+min;}function generateSceneId(){return randomInteger(0,0x7fffff);}function generateCsi(mediaFamily,sceneId){var av;if(mediaFamily===MediaFamily.Audio){av=0;}else {av=1;}return sceneId<<8|av;}function getMediaType(mediaFamily,mediaContent){if(mediaFamily===MediaFamily.Video&&mediaContent===MediaContent.Main){return MediaType.VideoMain;}if(mediaFamily===MediaFamily.Video&&mediaContent===MediaContent.Slides){return MediaType.VideoSlides;}if(mediaFamily===MediaFamily.Audio&&mediaContent===MediaContent.Main){return MediaType.AudioMain;}return MediaType.AudioSlides;}function getMediaFamily(mediaType){return [MediaType.VideoMain,MediaType.VideoSlides].includes(mediaType)?MediaFamily.Video:MediaFamily.Audio;}function getMediaContent(mediaType){return [MediaType.VideoMain,MediaType.AudioMain].includes(mediaType)?MediaContent.Main:MediaContent.Slides;}var isTruthyOrZero=value=>value===0||Boolean(value);function areArraysEqual(left,right,predicate){if(left.length!==right.length){return false;}for(var i=0;iid1[key]===id2[key]);}function isValidStreamInfo(obj){var maybeStreamInfo=obj;return Boolean(maybeStreamInfo.id&&isValidStreamId(maybeStreamInfo.id)&&['no source','invalid source','live','avatar','bandwidth disabled','away'].includes(maybeStreamInfo.state));}function areStreamInfosEqual(left,right){return areStreamIdsEqual(left.id,right.id)&&left.state===right.state&&left.csi===right.csi;}class MediaRequestStatusMsg{constructor(seqNum,streamStates){this.seqNum=seqNum;this.streamStates=streamStates;}}function isValidMediaRequestStatusMsg(msg){var maybeMediaRequestStatusMsg=msg;return Boolean(maybeMediaRequestStatusMsg.seqNum)&&maybeMediaRequestStatusMsg.streamStates&&maybeMediaRequestStatusMsg.streamStates.every(streamInfo=>isValidStreamInfo(streamInfo));}class MediaRequestStatusAckMsg{constructor(mediaRequestStatusSeqNum){this.mediaRequestStatusSeqNum=mediaRequestStatusSeqNum;}toString(){return \"MediaRequestStatusAckMsg(seqNum=\".concat(this.mediaRequestStatusSeqNum,\")\");}}function isValidMediaRequestStatusAckMsg(msg){var maybeMediaRequestStatusAckMsg=msg;return Boolean(maybeMediaRequestStatusAckMsg.mediaRequestStatusSeqNum);}class ReceiverSelectedInfo{constructor(csi){this.csi=csi;}toString(){return \"ReceiverSelectedInfo(csi=\".concat(this.csi,\")\");}}function isValidReceiverSelectedInfo(msg){var maybeReceiverSelectedInfo=msg;return Boolean(maybeReceiverSelectedInfo.csi);}function areReceiverSelectedInfosEqual(left,right){return left.csi===right.csi;}function arePolicySpecificInfosEqual(left,right){if(isValidActiveSpeakerInfo(left)){if(!isValidActiveSpeakerInfo(right)){return false;}return areActiveSpeakerInfosEqual(left,right);}if(isValidReceiverSelectedInfo(left)){if(!isValidReceiverSelectedInfo(right)){return false;}return areReceiverSelectedInfosEqual(left,right);}throw new Error('Invalid PolicySpecificInfo');}class SourceAdvertisementMsg{constructor(seqNum,numTotalSources,numLiveSources,namedMediaGroups,videoContentHint){this.seqNum=seqNum;this.numTotalSources=numTotalSources;this.numLiveSources=numLiveSources;this.namedMediaGroups=namedMediaGroups;this.videoContentHint=videoContentHint;}toString(){return \"SourceAdvertisement(seqNum=\".concat(this.seqNum,\", numTotalSources=\").concat(this.numTotalSources,\", numLiveSources=\").concat(this.numLiveSources,\", namedMediaGroups=\").concat(this.namedMediaGroups,\", videoContentHint=\").concat(this.videoContentHint);}}function isValidSourceAdvertisementMsg(msg){var maybeSourceAdvertisementMsg=msg;return Boolean(maybeSourceAdvertisementMsg.seqNum&&isTruthyOrZero(maybeSourceAdvertisementMsg.numTotalSources)&&isTruthyOrZero(maybeSourceAdvertisementMsg.numLiveSources));}function areSourceAdvertisementMsgsEqual(sourceAdvertisementMsg1,sourceAdvertisementMsg2){return sourceAdvertisementMsg1.numLiveSources===sourceAdvertisementMsg2.numLiveSources&&sourceAdvertisementMsg1.numTotalSources===sourceAdvertisementMsg2.numTotalSources&&areArraysEqual(sourceAdvertisementMsg1.namedMediaGroups||[],sourceAdvertisementMsg2.namedMediaGroups||[],areNamedMediaGroupsEqual)&&sourceAdvertisementMsg1.videoContentHint===sourceAdvertisementMsg2.videoContentHint;}class SourceAdvertisementAckMsg{constructor(sourceAdvertisementSeqNum){this.sourceAdvertisementSeqNum=sourceAdvertisementSeqNum;}toString(){return \"SourceAdvertisementAckMsg(sourceAdvertisementSeqNum=\".concat(this.sourceAdvertisementSeqNum,\")\");}}function isValidSourceAdvertisementAckMsg(msg){var maybeSourceAdvertisementAckMsg=msg;return Boolean(maybeSourceAdvertisementAckMsg.sourceAdvertisementSeqNum);}class StreamRequest$1{constructor(policy,policySpecificInfo,ids,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.ids=ids;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}toString(){return \"Request(policy=\".concat(this.policy,\", info=\").concat(this.policySpecificInfo,\", ids=[\").concat(this.ids,\"], maxPayloadBitsPerSecond=[\").concat(this.maxPayloadBitsPerSecond,\"], codecInfos=[\").concat(this.codecInfos,\"])\");}}function areStreamRequestsEqual(left,right){if(left.policy!==right.policy){return false;}if(!arePolicySpecificInfosEqual(left.policySpecificInfo,right.policySpecificInfo)){return false;}if(!areArraysEqual(left.ids,right.ids,areStreamIdsEqual)){return false;}if(left.maxPayloadBitsPerSecond!==right.maxPayloadBitsPerSecond){return false;}return areArraysEqual(left.codecInfos,right.codecInfos,areCodecInfosEqual);}class RetransmitHandler{constructor(msg,maxNumRetransmits,retransmitIntervalMs,transmitCallback,expirationCallback){this.timerHandle=undefined;this.msg=msg;this.numRetransmitsLeft=maxNumRetransmits;this.retransmitIntervalMs=retransmitIntervalMs;this.transmitCallback=transmitCallback;this.expirationCallback=expirationCallback;this.scheduleTimer();}onTimer(){var _a;if(this.numRetransmitsLeft>0){--this.numRetransmitsLeft;this.transmitCallback(this.msg);this.scheduleTimer();}else {(_a=this.expirationCallback)===null||_a===void 0?void 0:_a.call(this,this.msg);}}scheduleTimer(){this.timerHandle=window.setTimeout(()=>this.onTimer(),this.retransmitIntervalMs);}cancel(){if(this.timerHandle){clearTimeout(this.timerHandle);}this.timerHandle=undefined;}}var JmpSessionEvents;(function(JmpSessionEvents){JmpSessionEvents[\"ActiveSpeaker\"]=\"active-speaker\";JmpSessionEvents[\"MediaRequestReceived\"]=\"media-request-received\";JmpSessionEvents[\"MediaRequestStatusReceived\"]=\"media-request-status-received\";JmpSessionEvents[\"SourceAdvertisementReceived\"]=\"source-advertisement-received\";})(JmpSessionEvents||(JmpSessionEvents={}));class JmpSession extends EventEmitter$6{constructor(mediaFamily,mediaContent){var maxNumRetransmits=arguments.length>2&&arguments[2]!==undefined?arguments[2]:200;var retransmitIntervalMs=arguments.length>3&&arguments[3]!==undefined?arguments[3]:250;super();this.currMediaRequestSeqNum=1;this.currSourceAdvertisementSeqNum=1;this.currMediaRequestStatusSeqNum=1;this.txCallback=undefined;this.lastSentMediaRequest=undefined;this.lastSentMediaRequestAck=undefined;this.lastReceivedMediaRequest=undefined;this.mediaFamily=mediaFamily;this.mediaContent=mediaContent;this.logger=Logger$1.get(\"JmpSession \".concat(this.mediaFamily,\"-\").concat(this.mediaContent));this.maxNumRetransmits=maxNumRetransmits;this.retransmitIntervalMs=retransmitIntervalMs;}getLogger(){return this.logger;}sendRequests(requests){var _a;var mediaRequestMsg=new MediaRequestMsg(this.currMediaRequestSeqNum,requests);if(!this.lastSentMediaRequest||!areArraysEqual(this.lastSentMediaRequest.msg.requests,requests,areStreamRequestsEqual)){this.sendJmpMsg(JmpMsgType.MediaRequest,mediaRequestMsg);(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.cancel();this.lastSentMediaRequest=new RetransmitHandler(mediaRequestMsg,this.maxNumRetransmits,this.retransmitIntervalMs,()=>{this.logger.info(\"Retransmitting previously sent MediaRequest...\");this.sendJmpMsg(JmpMsgType.MediaRequest,mediaRequestMsg);},expiredJmpMsg=>{this.logger.warn(\"Retransmits for message expired: \".concat(expiredJmpMsg));});this.currMediaRequestSeqNum++;}else {this.logger.info(\"Duplicate MediaRequest detected and will not be sent: \".concat(mediaRequestMsg));}}sendSourceAdvertisement(numTotalSources,numLiveSources,namedMediaGroups,videoContentHint){var _a;var sourceAdvertisementMsg=new SourceAdvertisementMsg(this.currSourceAdvertisementSeqNum,numTotalSources,numLiveSources,namedMediaGroups,videoContentHint);if(!this.lastSentSourceAdvertisement||!areSourceAdvertisementMsgsEqual(this.lastSentSourceAdvertisement.msg,sourceAdvertisementMsg)){this.sendJmpMsg(JmpMsgType.SourceAdvertisement,sourceAdvertisementMsg);(_a=this.lastSentSourceAdvertisement)===null||_a===void 0?void 0:_a.cancel();this.lastSentSourceAdvertisement=new RetransmitHandler(sourceAdvertisementMsg,this.maxNumRetransmits,this.retransmitIntervalMs,()=>{this.logger.info(\"Retransmitting previously sent SourceAdvertisement...\");this.sendJmpMsg(JmpMsgType.SourceAdvertisement,sourceAdvertisementMsg);},expiredMsg=>{this.logger.warn(\"Retransmits for message expired: \",expiredMsg);});this.currSourceAdvertisementSeqNum++;}else {this.logger.info(\"Duplicate SourceAdvertisement detected and will not be sent: \",sourceAdvertisementMsg);}}sendMediaRequestStatus(streamStates){var _a,_b;var filteredStreamStates=streamStates.filter(streamState=>{var _a;return (_a=this.lastReceivedMediaRequest)===null||_a===void 0?void 0:_a.requests.some(req=>req.ids.find(streamId=>areStreamIdsEqual(streamId,streamState.id)));});var mediaRequestStatus=new MediaRequestStatusMsg(this.currMediaRequestStatusSeqNum,filteredStreamStates);if(!((_a=this.lastSentMediaRequestStatus)===null||_a===void 0?void 0:_a.msg.streamStates)||!areArraysEqual(filteredStreamStates,this.lastSentMediaRequestStatus.msg.streamStates,areStreamInfosEqual)){this.sendJmpMsg(JmpMsgType.MediaRequestStatus,mediaRequestStatus);(_b=this.lastSentMediaRequestStatus)===null||_b===void 0?void 0:_b.cancel();this.lastSentMediaRequestStatus=new RetransmitHandler(mediaRequestStatus,this.maxNumRetransmits,this.retransmitIntervalMs,()=>{this.logger.info(\"Retransmitting previously sent MediaRequestStatus...\");this.sendJmpMsg(JmpMsgType.MediaRequestStatus,mediaRequestStatus);},expiredMsg=>{this.logger.warn(\"Retransmits for message expired: \",expiredMsg);});this.currMediaRequestStatusSeqNum++;}else {this.logger.info(\"Duplicate MediaRequestStatus detected and will not be sent: \",mediaRequestStatus);}}receive(jmpMsg){if(jmpMsg.mediaContent!==this.mediaContent||jmpMsg.mediaFamily!==this.mediaFamily){this.logger.error(\"JmpMsg \".concat(JSON.stringify(jmpMsg),\" sent to incorrect JmpSession\"));return;}this.logger.debug(\"Received JmpMsg\",JSON.stringify(jmpMsg));var{payload}=jmpMsg;if(payload.msgType===JmpMsgType.MediaRequest){var mediaRequestMsg=payload.payload;if(!isValidMediaRequestMsg(mediaRequestMsg)){this.logger.error(\"Received invalid MediaRequest:\",JSON.stringify(mediaRequestMsg));return;}this.handleIncomingMediaRequest(mediaRequestMsg);}else if(payload.msgType===JmpMsgType.MediaRequestAck){var mediaRequestAckMsg=payload.payload;if(!isValidMediaRequestAckMsg(mediaRequestAckMsg)){this.logger.error(\"Received invalid MediaRequest ACK:\",JSON.stringify(mediaRequestAckMsg));return;}this.handleIncomingMediaRequestAck(mediaRequestAckMsg);}else if(payload.msgType===JmpMsgType.ActiveSpeakerNotification){var activeSpeakerNotification=payload.payload;if(!isValidActiveSpeakerNotificationMsg(activeSpeakerNotification)){this.logger.info(\"Received invalid Active Speaker Notification:\",JSON.stringify(activeSpeakerNotification));return;}this.handleIncomingActiveSpeakerNotification(activeSpeakerNotification);}else if(payload.msgType===JmpMsgType.SourceAdvertisement){var sourceAdvertisement=payload.payload;if(!isValidSourceAdvertisementMsg(sourceAdvertisement)){this.logger.error(\"Received invalid SourceAdvertisementMsg:\",JSON.stringify(sourceAdvertisement));return;}this.handleIncomingSourceAdvertisement(sourceAdvertisement);}else if(payload.msgType===JmpMsgType.SourceAdvertisementAck){var sourceAdvertisementAck=payload.payload;if(!isValidSourceAdvertisementAckMsg(sourceAdvertisementAck)){this.logger.error(\"Received invalid SourceAdvertisementAckMsg:\",JSON.stringify(sourceAdvertisementAck));return;}this.handleIncomingSourceAdvertisementAck(sourceAdvertisementAck);}else if(payload.msgType===JmpMsgType.MediaRequestStatus){var mediaRequestStatus=payload.payload;if(!isValidMediaRequestStatusMsg(mediaRequestStatus)){this.logger.error(\"Received invalid MediaRequestStatusMsg:\",JSON.stringify(mediaRequestStatus));return;}this.handleIncomingMediaRequestStatus(mediaRequestStatus);}else if(payload.msgType===JmpMsgType.MediaRequestStatusAck){var mediaRequestStatusAck=payload.payload;if(!isValidMediaRequestStatusAckMsg(mediaRequestStatusAck)){this.logger.error(\"Received invalid MediaRequestStatusAckMsg:\",JSON.stringify(mediaRequestStatusAck));return;}this.handleIncomingMediaRequestStatusAck(mediaRequestStatusAck);}else {this.logger.error(\"Received unknown JmpMsg\");}}setTxCallback(callback){this.txCallback=callback;}close(){var _a,_b,_c;this.logger.info(\"closing\");(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.cancel();(_b=this.lastSentMediaRequestStatus)===null||_b===void 0?void 0:_b.cancel();(_c=this.lastSentSourceAdvertisement)===null||_c===void 0?void 0:_c.cancel();}sendJmpMsg(msgType,payload){var _a;var jmpMsg=new JmpMsg(this.mediaFamily,this.mediaContent,{msgType,payload});var homerMsg=new HomerMsg(HomerMsgType.Multistream,jmpMsg);(_a=this.txCallback)===null||_a===void 0?void 0:_a.call(this,JSON.stringify(homerMsg));}handleIncomingMediaRequest(mediaRequestMsg){var _a;if(this.lastReceivedMediaRequest&&mediaRequestMsg.seqNum<((_a=this.lastReceivedMediaRequest)===null||_a===void 0?void 0:_a.seqNum)){this.logger.info(\"Received old MediaRequest, ignoring\");}else if(this.lastReceivedMediaRequest&&mediaRequestMsg.seqNum===this.lastReceivedMediaRequest.seqNum){if(this.lastSentMediaRequestAck){this.logger.info(\"Received duplicate MediaRequest, re-sending ACK\");this.sendJmpMsg(JmpMsgType.MediaRequestAck,this.lastSentMediaRequestAck);}else {this.logger.warn(\"Received duplicate MediaRequest, but there was no ACK previously sent\");}}else {this.logger.info(\"Received new MediaRequest, sending ACK\");var mediaRequestAck=new MediaRequestAckMsg(mediaRequestMsg.seqNum);this.lastReceivedMediaRequest=mediaRequestMsg;this.lastSentMediaRequestAck=mediaRequestAck;this.sendJmpMsg(JmpMsgType.MediaRequestAck,mediaRequestAck);this.emit(JmpSessionEvents.MediaRequestReceived,mediaRequestMsg);}}handleIncomingMediaRequestAck(mediaRequestAckMsg){var _a,_b,_c;if(mediaRequestAckMsg.mediaRequestSeqNum===((_b=(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info(\"Received ACK for last sent MediaRequest\");(_c=this.lastSentMediaRequest)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info(\"Received ACK for old MediaRequest\");}}handleIncomingActiveSpeakerNotification(activeSpeakerNotification){this.logger.debug(\"Received Active Speaker Notification:\",activeSpeakerNotification);this.emit(JmpSessionEvents.ActiveSpeaker,activeSpeakerNotification);}handleIncomingSourceAdvertisement(sourceAdvertisement){if(this.lastReceivedSourceAdvertisement&&sourceAdvertisement.seqNum1&&arguments[1]!==undefined?arguments[1]:'';this.type=type;this.message=message;}}var commonjsGlobal$1=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};var logger$1={exports:{}};/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */(function(module){(function(global){// Top level module for the global, static logger instance.\nvar Logger={};// For those that are at home that are keeping score.\nLogger.VERSION=\"1.6.1\";// Function which handles all incoming log messages.\nvar logHandler;// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\nvar contextualLoggersByNameMap={};// Polyfill for ES5's Function.bind.\nvar bind=function bind(scope,func){return function(){return func.apply(scope,arguments);};};// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\nvar merge=function merge(){var args=arguments,target=args[0],key,i;for(i=1;i=filterLevel.value;},trace:function trace(){this.invoke(Logger.TRACE,arguments);},debug:function debug(){this.invoke(Logger.DEBUG,arguments);},info:function info(){this.invoke(Logger.INFO,arguments);},warn:function warn(){this.invoke(Logger.WARN,arguments);},error:function error(){this.invoke(Logger.ERROR,arguments);},time:function time(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'start']);}},timeEnd:function timeEnd(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'end']);}},// Invokes the logger callback if it's not being filtered.\ninvoke:function invoke(level,msgArgs){if(logHandler&&this.enabledFor(level)){logHandler(msgArgs,merge({level:level},this.context));}}};// Protected instance which all calls to the to level `Logger` module will be routed through.\nvar globalLogger=new ContextualLogger({filterLevel:Logger.OFF});// Configure the global Logger instance.\n(function(){// Shortcut for optimisers.\nvar L=Logger;L.enabledFor=bind(globalLogger,globalLogger.enabledFor);L.trace=bind(globalLogger,globalLogger.trace);L.debug=bind(globalLogger,globalLogger.debug);L.time=bind(globalLogger,globalLogger.time);L.timeEnd=bind(globalLogger,globalLogger.timeEnd);L.info=bind(globalLogger,globalLogger.info);L.warn=bind(globalLogger,globalLogger.warn);L.error=bind(globalLogger,globalLogger.error);// Don't forget the convenience alias!\nL.log=L.info;})();// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\n// object with the supplied log messages and the second being a context object which contains a hash of stateful\n// parameters which the logging function can consume.\nLogger.setHandler=function(func){logHandler=func;};// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\n// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\nLogger.setLevel=function(level){// Set the globalLogger's level.\nglobalLogger.setLevel(level);// Apply this level to all registered contextual loggers.\nfor(var key in contextualLoggersByNameMap){if(contextualLoggersByNameMap.hasOwnProperty(key)){contextualLoggersByNameMap[key].setLevel(level);}}};// Gets the global logging filter level\nLogger.getLevel=function(){return globalLogger.getLevel();};// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\n// default context and log handler.\nLogger.get=function(name){// All logger instances are cached so they can be configured ahead of use.\nreturn contextualLoggersByNameMap[name]||(contextualLoggersByNameMap[name]=new ContextualLogger(merge({name:name},globalLogger.context)));};// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\n// write to the window's console object (if present); the optional options object can be used to customise the\n// formatter used to format each log message.\nLogger.createDefaultHandler=function(options){options=options||{};options.formatter=options.formatter||function defaultMessageFormatter(messages,context){// Prepend the logger's name to the log message for easy identification.\nif(context.name){messages.unshift(\"[\"+context.name+\"]\");}};// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\n// that don't offer a native console method.\nvar timerStartTimeByLabelMap={};// Support for IE8+ (and other, slightly more sane environments)\nvar invokeConsoleMethod=function invokeConsoleMethod(hdlr,messages){Function.prototype.apply.call(hdlr,console,messages);};// Check for the presence of a logger.\nif(typeof console===\"undefined\"){return function(){/* no console */};}return function(messages,context){// Convert arguments object to Array.\nmessages=Array.prototype.slice.call(messages);var hdlr=console.log;var timerLabel;if(context.level===Logger.TIME){timerLabel=(context.name?'['+context.name+'] ':'')+messages[0];if(messages[1]==='start'){if(console.time){console.time(timerLabel);}else {timerStartTimeByLabelMap[timerLabel]=new Date().getTime();}}else {if(console.timeEnd){console.timeEnd(timerLabel);}else {invokeConsoleMethod(hdlr,[timerLabel+': '+(new Date().getTime()-timerStartTimeByLabelMap[timerLabel])+'ms']);}}}else {// Delegate through to custom warn/error loggers if present on the console.\nif(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context.level===Logger.ERROR&&console.error){hdlr=console.error;}else if(context.level===Logger.INFO&&console.info){hdlr=console.info;}else if(context.level===Logger.DEBUG&&console.debug){hdlr=console.debug;}else if(context.level===Logger.TRACE&&console.trace){hdlr=console.trace;}options.formatter(messages,context);invokeConsoleMethod(hdlr,messages);}};};// Configure and example a Default implementation which writes to the `window.console` (if present). The\n// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\nLogger.useDefaults=function(options){Logger.setLevel(options&&options.defaultLevel||Logger.DEBUG);Logger.setHandler(Logger.createDefaultHandler(options));};// Createa an alias to useDefaults to avoid reaking a react-hooks rule.\nLogger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.\nif(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$1);})(logger$1);var Logger=logger$1.exports;var DEFAULT_LOGGER_NAME='web-client-media-engine';var logger=Logger.get(DEFAULT_LOGGER_NAME);logger.setLevel(Logger.DEBUG);function logErrorAndThrow(errorType,message){logger.error(message);throw new WcmeError(errorType,message);}function setLogHandler(logHandler){Logger.setHandler(logHandler);Logger$1.setHandler(logHandler);Logger$2.setHandler(logHandler);}var MediaCodecMimeType;(function(MediaCodecMimeType){MediaCodecMimeType[\"H264\"]=\"video/H264\";MediaCodecMimeType[\"AV1\"]=\"video/AV1\";MediaCodecMimeType[\"OPUS\"]=\"audio/opus\";})(MediaCodecMimeType||(MediaCodecMimeType={}));var defaultMaxVideoEncodeFrameSize=8160;var defaultMaxVideoEncodeMbps=244800;var RecommendedOpusBitrates;(function(RecommendedOpusBitrates){RecommendedOpusBitrates[RecommendedOpusBitrates[\"NB\"]=12000]=\"NB\";RecommendedOpusBitrates[RecommendedOpusBitrates[\"WB\"]=20000]=\"WB\";RecommendedOpusBitrates[RecommendedOpusBitrates[\"FB\"]=40000]=\"FB\";RecommendedOpusBitrates[RecommendedOpusBitrates[\"FB_MONO_MUSIC\"]=64000]=\"FB_MONO_MUSIC\";RecommendedOpusBitrates[RecommendedOpusBitrates[\"FB_STEREO_MUSIC\"]=128000]=\"FB_STEREO_MUSIC\";})(RecommendedOpusBitrates||(RecommendedOpusBitrates={}));var maxFrameSizeToMaxBitrateMap=new Map([[60,99000],[240,199000],[576,300000],[920,640000],[1296,720000],[2304,880000],[3600,2500000],[8160,4000000]]);function areProfileLevelIdsCompatible(senderProfileLevelId,receiverProfileLevelId,levelAsymmetryAllowed){var senderProfile=Number.parseInt(\"0x\".concat(senderProfileLevelId),16);var recvProfile=Number.parseInt(\"0x\".concat(receiverProfileLevelId),16);var senderProfileIdc=senderProfile>>16;var recvProfileIdc=recvProfile>>16;var senderProfileIop=(senderProfile&0x00ff00)>>8;var recvProfileIop=(recvProfile&0x00ff00)>>8;var senderLevelIdc=senderProfile&0x0000ff;var recvLevelIdc=recvProfile&0x0000ff;var areProfileCompatible=senderProfileIdc===recvProfileIdc&&senderProfileIop===recvProfileIop||senderProfileIdc===0x42&&recvProfileIdc===0x42&&(senderProfileIop&0x40)===(recvProfileIop&0x40);var isLevelIdcCompatible=levelAsymmetryAllowed?true:senderLevelIdc<=recvLevelIdc;return areProfileCompatible&&isLevelIdcCompatible;}function areCodecsCompatible(senderCodec,receiverCodec){return Object.keys(receiverCodec).every(key=>{if(key==='clockRate'||key==='name'){return senderCodec[key]===receiverCodec[key];}if(key==='fmtParams'){var fmtpForSender=senderCodec[key];var fmtpForReceiver=receiverCodec[key];var levelAsymmetryAllowed=[...fmtpForSender.keys()].some(senderFmtpParamKey=>{return senderFmtpParamKey==='level-asymmetry-allowed'&&fmtpForReceiver.get(senderFmtpParamKey)==='1'&&fmtpForSender.get(senderFmtpParamKey)==='1';});return [...fmtpForSender.keys()].every(senderFmtpParamKey=>{if(fmtpForReceiver.get(senderFmtpParamKey)){if(senderFmtpParamKey==='profile-level-id'){return areProfileLevelIdsCompatible(fmtpForSender.get(senderFmtpParamKey),fmtpForReceiver.get(senderFmtpParamKey),levelAsymmetryAllowed);}}if(senderFmtpParamKey==='packetization-mode'){return fmtpForSender.get(senderFmtpParamKey)===fmtpForReceiver.get(senderFmtpParamKey);}return true;});}return true;});}function gcd(a,b){return b===0?a:gcd(b,a%b);}function getFrameHeightByMaxFs(sourceAspectRatio,requestedMaxFs){var _gcd=gcd(sourceAspectRatio[0],sourceAspectRatio[1]);var minNumberRatiosForWidth=sourceAspectRatio[0]/_gcd;var minNumberRatiosForHeight=sourceAspectRatio[1]/_gcd;return Math.floor(Math.sqrt(requestedMaxFs*16*16/(minNumberRatiosForWidth*minNumberRatiosForHeight)))*minNumberRatiosForHeight;}function getScaleDownRatio(sourceWidth,sourceHeight,maxFs,maxWidth,maxHeight){if(!sourceWidth||!sourceHeight||!maxFs){return undefined;}var scaleDownRatio=Math.max(sourceHeight/getFrameHeightByMaxFs([sourceWidth,sourceHeight],maxFs),1.0);if(maxWidth&&maxHeight){scaleDownRatio=Math.max(sourceWidth/maxWidth,sourceHeight/maxHeight,scaleDownRatio);}return scaleDownRatio;}function getRecommendedMaxBitrateForFrameSize(requestedMaxFs){if(requestedMaxFs<60){logErrorAndThrow(WcmeErrorType.GET_MAX_BITRATE_FAILED,\"Requested max video frame size cannot be less than 60.\");}var expectedHeight=[...maxFrameSizeToMaxBitrateMap.keys()].sort((a,b)=>b-a).find(h=>requestedMaxFs>=h);return maxFrameSizeToMaxBitrateMap.get(expectedHeight);}/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */function __awaiter$1(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value);});}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value));}catch(e){reject(e);}}function rejected(value){try{step(generator[\"throw\"](value));}catch(e){reject(e);}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected);}step((generator=generator.apply(thisArg,_arguments||[])).next());});}var rtcstats={};var __awaiter=commonjsGlobal$1&&commonjsGlobal$1.__awaiter||function(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value);});}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value));}catch(e){reject(e);}}function rejected(value){try{step(generator[\"throw\"](value));}catch(e){reject(e);}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected);}step((generator=generator.apply(thisArg,_arguments||[])).next());});};var __generator=commonjsGlobal$1&&commonjsGlobal$1.__generator||function(thisArg,body){var _={label:0,sent:function sent(){if(t[0]&1)throw t[1];return t[1];},trys:[],ops:[]},f,y,t,g;return g={next:verb(0),\"throw\":verb(1),\"return\":verb(2)},typeof Symbol===\"function\"&&(g[Symbol.iterator]=function(){return this;}),g;function verb(n){return function(v){return step([n,v]);};}function step(op){if(f)throw new TypeError(\"Generator is already executing.\");while(g&&(g=0,op[0]&&(_=0)),_){try{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;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return {value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue;}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]timestamp){timestamp=report.timestamp;}});// Delete the timestamps on each item.\nObject.keys(updatedStats).forEach(function(id){var report=updatedStats[id];if(report.timestamp===timestamp){delete report.timestamp;}});updatedStats.timestamp=timestamp;return updatedStats;};/**\n * Format the stats report into an array.\n *\n * @param report - A WebRTC stats report.\n * @returns - An array of Stats Report items.\n */var formatStatsReport=function formatStatsReport(report){return Object.keys(report).filter(function(name){return name!=='timestamp';}).map(function(name){return JSON.stringify(report[name]);});};/**\n * Parametrize a single string event to contain type and an (empty) id.\n *\n * @param value - The value to parametrize.\n * @returns An event object.\n */var makeEvent=function makeEvent(value){return [JSON.stringify({value:value,type:'string',id:''})];};/**\n * Attach a Peer Connection to periodically get updated on events and stats.\n *\n * @param pc - Peer Connection in which we attach.\n * @param logger - Logging function to log events and stats.\n * @param intervalTime - Time between each `getStats` check.\n * @param statsPreProcessor - Optional function that modifies stats.\n */var rtcStats=function rtcStats(pc,logger,intervalTime,statsPreProcessor){if(statsPreProcessor===void 0){statsPreProcessor=function statsPreProcessor(){return Promise.resolve();};}var prev={};/**\n * Log stats or event data with additional tracking information.\n *\n * @param name - Name of the event to log.\n * @param payload - Log data pertaining to the event.\n * @param timestamp - Time the event happened in milliseconds.\n */var trace=function trace(name,payload,timestamp){logger({timestamp:timestamp?Math.round(timestamp):Date.now(),name:name,payload:payload});};trace('rtcConfiguration',makeEvent(JSON.stringify(pc.getConfiguration())));var origPeerConnection=window.RTCPeerConnection;pc.addEventListener('icecandidate',function(e){if(e.candidate){trace('onicecandidate',makeEvent(JSON.stringify(e.candidate)));}});pc.addEventListener('icecandidateerror',function(event){var url=event.url,errorCode=event.errorCode,errorText=event.errorText;trace('onicecandidateerror',makeEvent(\"[\".concat(url,\"] \").concat(errorCode,\": \").concat(errorText)));});pc.addEventListener('track',function(e){trace('ontrack',makeEvent(\"\".concat(e.track.kind,\":\").concat(e.track.id,\" \").concat(e.streams.map(function(stream){return \"stream:\".concat(stream.id);}).join(' '))));});pc.addEventListener('signalingstatechange',function(){trace('onsignalingstatechange',makeEvent(pc.signalingState));});pc.addEventListener('iceconnectionstatechange',function(){trace('oniceconnectionstatechange',makeEvent(pc.iceConnectionState));});pc.addEventListener('icegatheringstatechange',function(){trace('onicegatheringstatechange',makeEvent(pc.iceGatheringState));});pc.addEventListener('connectionstatechange',function(){trace('onconnectionstatechange',makeEvent(pc.connectionState));});pc.addEventListener('negotiationneeded',function(){trace('onnegotiationneeded',makeEvent('negotiationneeded'));});pc.addEventListener('datachannel',function(event){trace('ondatachannel',makeEvent(\"\".concat(event.channel.id,\": \").concat(event.channel.label)));});['close'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){trace(\"on\".concat(method),makeEvent(method));return nativeMethod.apply(this,arguments);};}});['createDataChannel'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){trace(\"on\".concat(method),makeEvent(method));var dataChannel=nativeMethod.apply(this,arguments);dataChannel.addEventListener('open',function(){trace(\"ondataChannelOpen\",makeEvent(\"\".concat(dataChannel.id,\":\").concat(dataChannel.label)));});dataChannel.addEventListener('close',function(){trace(\"ondataChannelClose\",makeEvent(\"\".concat(dataChannel.id,\":\").concat(dataChannel.label)));});dataChannel.addEventListener('error',function(event){var error=event.error;trace(\"ondataChannelError\",makeEvent(\"\".concat(dataChannel.id,\":\").concat(dataChannel.label,\": \").concat(error.errorDetail)));});return dataChannel;};}});['addStream','removeStream'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){var stream=arguments[0];var streamInfo=stream.getTracks().map(function(t){return \"\".concat(t.kind,\":\").concat(t.id);}).join(',');trace(\"on\".concat(method),makeEvent(\"\".concat(stream.id,\" \").concat(streamInfo)));return nativeMethod.apply(this,arguments);};}});['addTrack'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){var track=arguments[0];var streams=[].slice.call(arguments,1);trace(\"on\".concat(method),makeEvent(\"\".concat(track.kind,\":\").concat(track.id,\" \").concat(streams.map(function(s){return \"stream:\".concat(s.id);}).join(';')||'-')));return nativeMethod.apply(this,arguments);};}});['removeTrack'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){var track=arguments[0].track;trace(\"on\".concat(method),makeEvent(track?\"\".concat(track.kind,\":\").concat(track.id):'null'));return nativeMethod.apply(this,arguments);};}});['createOffer','createAnswer'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){var opts;var args=arguments;if(arguments.length===1&&typeof arguments[0]==='object'){// eslint-disable-next-line prefer-destructuring\nopts=arguments[0];}else if(arguments.length===3&&typeof arguments[2]==='object'){// eslint-disable-next-line prefer-destructuring\nopts=arguments[2];}trace(\"on\".concat(method),makeEvent(opts||''));return nativeMethod.apply(this,opts?[opts]:undefined).then(function(description){trace(\"on\".concat(method,\"OnSuccess\"),makeEvent(description.sdp));if(args.length>0&&typeof args[0]==='function'){args[0].apply(null,[description]);return undefined;}return description;},function(err){trace(\"on\".concat(method,\"OnFailure\"),makeEvent(err.toString()));if(args.length>1&&typeof args[1]==='function'){args[1].apply(null,[err]);return;}throw err;});};}});['setLocalDescription','setRemoteDescription','addIceCandidate'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){var _this=this;var args=arguments;trace(\"on\".concat(method),makeEvent(method==='addIceCandidate'?arguments[0]:arguments[0]?arguments[0].sdp:'undefined'));return nativeMethod.apply(this,[arguments[0]]).then(function(){var _a;trace(\"on\".concat(method,\"OnSuccess\"),makeEvent('success'));if(method.endsWith('Description')){if(!_this.transportEventsPreviouslyAdded){var senders=_this.getSenders();var _loop_1=function _loop_1(sender){if(sender.transport){sender.transport.addEventListener('statechange',function(){if(sender&&sender.transport){trace(\"ondtlsStateChange\",makeEvent(sender.transport.state));}});sender.transport.addEventListener('error',function(error){var errorEvent=error;trace(\"ondtlsError\",makeEvent(errorEvent.error.errorDetail));});if(sender.transport.iceTransport){sender.transport.iceTransport.addEventListener('selectedcandidatepairchange',function(){var _a,_b,_c,_d,_e,_f;if(sender.transport&&sender.transport.iceTransport){var pair=sender.transport.iceTransport.getSelectedCandidatePair();var localCandidate=\"\".concat((_a=pair===null||pair===void 0?void 0:pair.local)===null||_a===void 0?void 0:_a.address,\":\").concat((_b=pair===null||pair===void 0?void 0:pair.local)===null||_b===void 0?void 0:_b.port,\"/\").concat((_c=pair===null||pair===void 0?void 0:pair.local)===null||_c===void 0?void 0:_c.protocol);var remoteCandidate=\"\".concat((_d=pair===null||pair===void 0?void 0:pair.remote)===null||_d===void 0?void 0:_d.address,\":\").concat((_e=pair===null||pair===void 0?void 0:pair.remote)===null||_e===void 0?void 0:_e.port,\"/\").concat((_f=pair===null||pair===void 0?void 0:pair.remote)===null||_f===void 0?void 0:_f.protocol);var pairString=\"local: \".concat(localCandidate,\", remote: \").concat(remoteCandidate);trace('onselectedCandidatePairChange',makeEvent(pairString));}});}_this.transportEventsPreviouslyAdded=true;if(pc.getConfiguration().bundlePolicy==='max-bundle'){return \"break\";}}};for(var _i=0,senders_1=senders;_i=2&&typeof args[1]==='function'){args[1].apply(null,[]);return undefined;}return undefined;},function(err){trace(\"on\".concat(method,\"OnFailure\"),makeEvent(err.toString()));if(args.length>=3&&typeof args[2]==='function'){args[2].apply(null,[err]);return undefined;}throw err;});};}});if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){var origGetUserMedia_1=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);var gum=function gum(){trace('onnavigator.mediaDevices.getUserMedia',makeEvent(JSON.stringify(arguments[0])));return origGetUserMedia_1.apply(navigator.mediaDevices,arguments).then(function(stream){trace('onnavigator.mediaDevices.getUserMediaOnSuccess',makeEvent(JSON.stringify(dumpStream(stream))));return stream;},function(err){trace('onnavigator.mediaDevices.getUserMediaOnFailure',makeEvent(err.name));return Promise.reject(err);});};navigator.mediaDevices.getUserMedia=gum.bind(navigator.mediaDevices);}if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia){var origGetDisplayMedia_1=navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);var gdm=function gdm(){trace('onnavigator.mediaDevices.getDisplayMedia',makeEvent(JSON.stringify(arguments[0])));return origGetDisplayMedia_1.apply(navigator.mediaDevices,arguments).then(function(stream){trace('onnavigator.mediaDevices.getDisplayMediaOnSuccess',makeEvent(JSON.stringify(dumpStream(stream))));return stream;},function(err){trace('onnavigator.mediaDevices.getDisplayMediaOnFailure',makeEvent(err.name));return Promise.reject(err);});};navigator.mediaDevices.getDisplayMedia=gdm.bind(navigator.mediaDevices);}var getStatsReport=function getStatsReport(){return __awaiter(void 0,void 0,void 0,function(){return __generator(this,function(_a){return [2/*return*/,pc.getStats(null).then(function(res){// Convert from stats report to js Map in order to have values set in `statsPreProcessor`\nvar statsMap=new Map();res.forEach(function(stats,key){return statsMap.set(key,stats);});return statsPreProcessor(statsMap).then(function(){var now=map2obj(statsMap);var base=deepCopy$1(now);// our new prev\nvar compressed=deltaCompression(prev,now);trace('stats-report',formatStatsReport(compressed),compressed.timestamp!==-Infinity?compressed.timestamp:undefined);prev=base;return Promise.resolve();});})];});});};var interval=window.setInterval(function(){if(pc.signalingState==='closed'){window.clearInterval(interval);return;}getStatsReport();},intervalTime);var forceStatsReport=function forceStatsReport(){return __awaiter(void 0,void 0,void 0,function(){return __generator(this,function(_a){return [2/*return*/,getStatsReport()];});});};return {forceStatsReport:forceStatsReport};};rtcStats_1=rtcstats.rtcStats=rtcStats;var NUM$1='\\\\d+';var SDP_TOKEN$1=\"[!#$%&'*+\\\\-.^_`{|}~a-zA-Z0-9]+\";var ANY_NON_WS$1='\\\\S+';var SP$1='\\\\s';var REST$1='.+';class Line$1{}var _a$5$1;class BandwidthLine$1 extends Line$1{constructor(bandwidthType,bandwidth){super();this.bandwidthType=bandwidthType;this.bandwidth=bandwidth;}static fromSdpLine(line){if(!BandwidthLine$1.regex.test(line)){return undefined;}var tokens=line.match(BandwidthLine$1.regex);var bandwidthType=tokens[1];var bandwidth=parseInt(tokens[2],10);return new BandwidthLine$1(bandwidthType,bandwidth);}toSdpLine(){return \"b=\".concat(this.bandwidthType,\":\").concat(this.bandwidth);}}_a$5$1=BandwidthLine$1;BandwidthLine$1.BW_TYPE_REGEX='CT|AS|TIAS';BandwidthLine$1.regex=new RegExp(\"^(\".concat(_a$5$1.BW_TYPE_REGEX,\"):(\").concat(NUM$1,\")\"));class BundleGroupLine$1 extends Line$1{constructor(mids){super();this.mids=mids;}static fromSdpLine(line){if(!BundleGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(BundleGroupLine$1.regex);var mids=tokens[1].split(' ');return new BundleGroupLine$1(mids);}toSdpLine(){return \"a=group:BUNDLE \".concat(this.mids.join(' '));}}BundleGroupLine$1.regex=new RegExp(\"^group:BUNDLE (\".concat(REST$1,\")\"));var _a$4$1;class CandidateLine$1 extends Line$1{constructor(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions){super();this.foundation=foundation;this.componentId=componentId;this.transport=transport;this.priority=priority;this.connectionAddress=connectionAddress;this.port=port;this.candidateType=candidateType;this.relAddr=relAddr;this.relPort=relPort;this.candidateExtensions=candidateExtensions;}static fromSdpLine(line){if(!CandidateLine$1.regex.test(line)){return undefined;}var tokens=line.match(CandidateLine$1.regex);var foundation=tokens[1];var componentId=parseInt(tokens[2],10);var transport=tokens[3];var priority=parseInt(tokens[4],10);var connectionAddress=tokens[5];var port=parseInt(tokens[6],10);var candidateType=tokens[7];var relAddr=tokens[8];var relPort=tokens[9]?parseInt(tokens[9],10):undefined;var candidateExtensions=tokens[10];return new CandidateLine$1(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions);}toSdpLine(){var str='';str+=\"a=candidate:\".concat(this.foundation,\" \").concat(this.componentId,\" \").concat(this.transport,\" \").concat(this.priority,\" \").concat(this.connectionAddress,\" \").concat(this.port,\" typ \").concat(this.candidateType);if(this.relAddr){str+=\" raddr \".concat(this.relAddr);}if(this.relPort){str+=\" rport \".concat(this.relPort);}if(this.candidateExtensions){str+=\" \".concat(this.candidateExtensions);}return str;}}_a$4$1=CandidateLine$1;CandidateLine$1.ICE_CHARS=\"[a-zA-Z0-9+/]+\";CandidateLine$1.regex=new RegExp(\"^candidate:(\".concat(_a$4$1.ICE_CHARS,\") (\").concat(NUM$1,\") (\").concat(ANY_NON_WS$1,\") (\").concat(NUM$1,\") (\").concat(ANY_NON_WS$1,\") (\").concat(NUM$1,\") typ (\").concat(ANY_NON_WS$1,\")(?: raddr (\").concat(ANY_NON_WS$1,\"))?(?: rport (\").concat(NUM$1,\"))?(?: (\").concat(REST$1,\"))?\"));class ConnectionLine$1 extends Line$1{constructor(netType,addrType,ipAddr){super();this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!ConnectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(ConnectionLine$1.regex);var netType=tokens[1];var addrType=tokens[2];var ipAddr=tokens[3];return new ConnectionLine$1(netType,addrType,ipAddr);}toSdpLine(){return \"c=\".concat(this.netType,\" \").concat(this.addrType,\" \").concat(this.ipAddr);}}ConnectionLine$1.regex=new RegExp(\"^(\".concat(ANY_NON_WS$1,\") (\").concat(ANY_NON_WS$1,\") (\").concat(ANY_NON_WS$1,\")\"));class ContentLine$1 extends Line$1{constructor(values){super();this.values=values;}static fromSdpLine(line){if(!ContentLine$1.regex.test(line)){return undefined;}var tokens=line.match(ContentLine$1.regex);var values=tokens[1].split(',');return new ContentLine$1(values);}toSdpLine(){return \"a=content:\".concat(this.values.join(','));}}ContentLine$1.regex=new RegExp(\"^content:(\".concat(REST$1,\")$\"));class DirectionLine$1 extends Line$1{constructor(direction){super();this.direction=direction;}static fromSdpLine(line){if(!DirectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(DirectionLine$1.regex);var direction=tokens[1];return new DirectionLine$1(direction);}toSdpLine(){return \"a=\".concat(this.direction);}}DirectionLine$1.regex=/^(sendrecv|sendonly|recvonly|inactive)$/;var _a$3$1;class ExtMapLine$1 extends Line$1{constructor(id,uri,direction,extensionAttributes){super();this.id=id;this.uri=uri;this.direction=direction;this.extensionAttributes=extensionAttributes;}static fromSdpLine(line){if(!ExtMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(ExtMapLine$1.regex);var id=parseInt(tokens[1],10);var direction=tokens[2];var uri=tokens[3];var extensionAttributes=tokens[4];return new ExtMapLine$1(id,uri,direction,extensionAttributes);}toSdpLine(){var str='';str+=\"a=extmap:\".concat(this.id);if(this.direction){str+=\"/\".concat(this.direction);}str+=\" \".concat(this.uri);if(this.extensionAttributes){str+=\" \".concat(this.extensionAttributes);}return str;}}_a$3$1=ExtMapLine$1;ExtMapLine$1.EXTMAP_DIRECTION=\"sendonly|recvonly|sendrecv|inactive\";ExtMapLine$1.regex=new RegExp(\"^extmap:(\".concat(NUM$1,\")(?:/(\").concat(_a$3$1.EXTMAP_DIRECTION,\"))? (\").concat(ANY_NON_WS$1,\")(?: (\").concat(REST$1,\"))?\"));class FingerprintLine$1 extends Line$1{constructor(fingerprint){super();this.fingerprint=fingerprint;}static fromSdpLine(line){if(!FingerprintLine$1.regex.test(line)){return undefined;}var tokens=line.match(FingerprintLine$1.regex);var fingerprint=tokens[1];return new FingerprintLine$1(fingerprint);}toSdpLine(){return \"a=fingerprint:\".concat(this.fingerprint);}}FingerprintLine$1.regex=new RegExp(\"^fingerprint:(\".concat(REST$1,\")\"));function parseFmtpParams$1(fmtpParams){fmtpParams=fmtpParams.replace(/^a=fmtp:\\d+\\x20/,'');var fmtpObj=new Map();if(/^\\d+([,/-]\\d+)+$/.test(fmtpParams)){fmtpObj.set(fmtpParams,undefined);return fmtpObj;}fmtpParams.split(';').forEach(param=>{var paramArr=param&¶m.split('=');if(paramArr.length!==2||!paramArr[0]||!paramArr[1]){throw new Error(\"Fmtp params is invalid with \".concat(fmtpParams));}fmtpObj.set(paramArr[0],paramArr[1]);});return fmtpObj;}class FmtpLine$1 extends Line$1{constructor(payloadType,params){super();this.payloadType=payloadType;this.params=params;}static fromSdpLine(line){if(!FmtpLine$1.regex.test(line)){return undefined;}var tokens=line.match(FmtpLine$1.regex);var payloadType=parseInt(tokens[1],10);var params=tokens[2];return new FmtpLine$1(payloadType,parseFmtpParams$1(params));}toSdpLine(){var fmtParams=Array.from(this.params.keys()).map(key=>{if(this.params.get(key)!==undefined){return \"\".concat(key,\"=\").concat(this.params.get(key));}return \"\".concat(key);}).join(';');return \"a=fmtp:\".concat(this.payloadType,\" \").concat(fmtParams);}}FmtpLine$1.regex=new RegExp(\"^fmtp:(\".concat(NUM$1,\") (\").concat(REST$1,\")\"));class IceOptionsLine$1 extends Line$1{constructor(options){super();this.options=options;}static fromSdpLine(line){if(!IceOptionsLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceOptionsLine$1.regex);var options=tokens[1].split(' ');return new IceOptionsLine$1(options);}toSdpLine(){return \"a=ice-options:\".concat(this.options.join(' '));}}IceOptionsLine$1.regex=new RegExp(\"^ice-options:(\".concat(REST$1,\")$\"));class IcePwdLine$1 extends Line$1{constructor(pwd){super();this.pwd=pwd;}static fromSdpLine(line){if(!IcePwdLine$1.regex.test(line)){return undefined;}var tokens=line.match(IcePwdLine$1.regex);var pwd=tokens[1];return new IcePwdLine$1(pwd);}toSdpLine(){return \"a=ice-pwd:\".concat(this.pwd);}}IcePwdLine$1.regex=new RegExp(\"^ice-pwd:(\".concat(ANY_NON_WS$1,\")$\"));class IceUfragLine$1 extends Line$1{constructor(ufrag){super();this.ufrag=ufrag;}static fromSdpLine(line){if(!IceUfragLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceUfragLine$1.regex);var ufrag=tokens[1];return new IceUfragLine$1(ufrag);}toSdpLine(){return \"a=ice-ufrag:\".concat(this.ufrag);}}IceUfragLine$1.regex=new RegExp(\"^ice-ufrag:(\".concat(ANY_NON_WS$1,\")$\"));class MaxMessageSizeLine$1 extends Line$1{constructor(maxMessageSize){super();this.maxMessageSize=maxMessageSize;}static fromSdpLine(line){if(!MaxMessageSizeLine$1.regex.test(line)){return undefined;}var tokens=line.match(MaxMessageSizeLine$1.regex);var maxMessageSize=parseInt(tokens[1],10);return new MaxMessageSizeLine$1(maxMessageSize);}toSdpLine(){return \"a=max-message-size:\".concat(this.maxMessageSize);}}MaxMessageSizeLine$1.regex=new RegExp(\"^max-message-size:(\".concat(NUM$1,\")\"));var _a$2$2;class MediaLine$1 extends Line$1{constructor(type,port,protocol,formats){super();this.type=type;this.port=port;this.protocol=protocol;this.formats=formats;}static fromSdpLine(line){if(!MediaLine$1.regex.test(line)){return undefined;}var tokens=line.match(MediaLine$1.regex);var type=tokens[1];var port=parseInt(tokens[2],10);var protocol=tokens[3];var formats=tokens[4].split(' ');return new MediaLine$1(type,port,protocol,formats);}toSdpLine(){return \"m=\".concat(this.type,\" \").concat(this.port,\" \").concat(this.protocol,\" \").concat(this.formats.join(' '));}}_a$2$2=MediaLine$1;MediaLine$1.MEDIA_TYPE='audio|video|application';MediaLine$1.regex=new RegExp(\"^(\".concat(_a$2$2.MEDIA_TYPE,\") (\").concat(NUM$1,\") (\").concat(ANY_NON_WS$1,\") (\").concat(REST$1,\")\"));class MidLine$1 extends Line$1{constructor(mid){super();this.mid=mid;}static fromSdpLine(line){if(!MidLine$1.regex.test(line)){return undefined;}var tokens=line.match(MidLine$1.regex);var mid=tokens[1];return new MidLine$1(mid);}toSdpLine(){return \"a=mid:\".concat(this.mid);}}MidLine$1.regex=new RegExp(\"^mid:(\".concat(ANY_NON_WS$1,\")$\"));class OriginLine$1 extends Line$1{constructor(username,sessionId,sessionVersion,netType,addrType,ipAddr){super();this.username=username;this.sessionId=sessionId;this.sessionVersion=sessionVersion;this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!OriginLine$1.regex.test(line)){return undefined;}var tokens=line.match(OriginLine$1.regex);var username=tokens[1];var sessionId=tokens[2];var sessionVersion=parseInt(tokens[3],10);var netType=tokens[4];var addrType=tokens[5];var ipAddr=tokens[6];return new OriginLine$1(username,sessionId,sessionVersion,netType,addrType,ipAddr);}toSdpLine(){return \"o=\".concat(this.username,\" \").concat(this.sessionId,\" \").concat(this.sessionVersion,\" \").concat(this.netType,\" \").concat(this.addrType,\" \").concat(this.ipAddr);}}OriginLine$1.regex=new RegExp(\"^(\".concat(ANY_NON_WS$1,\") (\").concat(ANY_NON_WS$1,\") (\").concat(NUM$1,\") (\").concat(ANY_NON_WS$1,\") (\").concat(ANY_NON_WS$1,\") (\").concat(ANY_NON_WS$1,\")\"));var _a$1$2;class RidLine$1 extends Line$1{constructor(id,direction,params){super();this.id=id;this.direction=direction;this.params=params;}static fromSdpLine(line){if(!RidLine$1.regex.test(line)){return undefined;}var tokens=line.match(RidLine$1.regex);var id=tokens[1];var direction=tokens[2];var params=tokens[3];return new RidLine$1(id,direction,params);}toSdpLine(){var str='';str+=\"a=rid:\".concat(this.id,\" \").concat(this.direction);if(this.params){str+=\" \".concat(this.params);}return str;}}_a$1$2=RidLine$1;RidLine$1.RID_ID=\"[\\\\w-]+\";RidLine$1.RID_DIRECTION=\"\\\\bsend\\\\b|\\\\brecv\\\\b\";RidLine$1.regex=new RegExp(\"^rid:(\".concat(_a$1$2.RID_ID,\") (\").concat(_a$1$2.RID_DIRECTION,\")(?:\").concat(SP$1,\"(\").concat(REST$1,\"))?\"));class RtcpMuxLine$1 extends Line$1{static fromSdpLine(line){if(!RtcpMuxLine$1.regex.test(line)){return undefined;}return new RtcpMuxLine$1();}toSdpLine(){return \"a=rtcp-mux\";}}RtcpMuxLine$1.regex=/^rtcp-mux$/;class RtcpFbLine$1 extends Line$1{constructor(payloadType,feedback){super();this.payloadType=payloadType;this.feedback=feedback;}static fromSdpLine(line){if(!RtcpFbLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtcpFbLine$1.regex);var payloadType=parseInt(tokens[1],10);var feedback=tokens[2];return new RtcpFbLine$1(payloadType,feedback);}toSdpLine(){return \"a=rtcp-fb:\".concat(this.payloadType,\" \").concat(this.feedback);}}RtcpFbLine$1.regex=new RegExp(\"^rtcp-fb:(\".concat(NUM$1,\") (\").concat(REST$1,\")\"));var _a$7;class RtpMapLine$1 extends Line$1{constructor(payloadType,encodingName,clockRate,encodingParams){super();this.payloadType=payloadType;this.encodingName=encodingName;this.clockRate=clockRate;this.encodingParams=encodingParams;}static fromSdpLine(line){if(!RtpMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtpMapLine$1.regex);var payloadType=parseInt(tokens[1],10);var encodingName=tokens[2];var clockRate=parseInt(tokens[3],10);var encodingParams=tokens[4];return new RtpMapLine$1(payloadType,encodingName,clockRate,encodingParams);}toSdpLine(){var str='';str+=\"a=rtpmap:\".concat(this.payloadType,\" \").concat(this.encodingName,\"/\").concat(this.clockRate);if(this.encodingParams){str+=\"/\".concat(this.encodingParams);}return str;}}_a$7=RtpMapLine$1;RtpMapLine$1.NON_SLASH_TOKEN='[^\\\\s/]+';RtpMapLine$1.regex=new RegExp(\"^rtpmap:(\".concat(NUM$1,\") (\").concat(_a$7.NON_SLASH_TOKEN,\")/(\").concat(_a$7.NON_SLASH_TOKEN,\")(?:/(\").concat(_a$7.NON_SLASH_TOKEN,\"))?\"));class SctpPortLine$1 extends Line$1{constructor(port){super();this.port=port;}static fromSdpLine(line){if(!SctpPortLine$1.regex.test(line)){return undefined;}var tokens=line.match(SctpPortLine$1.regex);var port=parseInt(tokens[1],10);return new SctpPortLine$1(port);}toSdpLine(){return \"a=sctp-port:\".concat(this.port);}}SctpPortLine$1.regex=new RegExp(\"^sctp-port:(\".concat(NUM$1,\")\"));class SessionInformationLine$1 extends Line$1{constructor(info){super();this.info=info;}static fromSdpLine(line){if(!SessionInformationLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionInformationLine$1.regex);var info=tokens[1];return new SessionInformationLine$1(info);}toSdpLine(){return \"i=\".concat(this.info);}}SessionInformationLine$1.regex=new RegExp(\"(\".concat(REST$1,\")\"));class SessionNameLine$1 extends Line$1{constructor(name){super();this.name=name;}static fromSdpLine(line){if(!SessionNameLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionNameLine$1.regex);var name=tokens[1];return new SessionNameLine$1(name);}toSdpLine(){return \"s=\".concat(this.name);}}SessionNameLine$1.regex=new RegExp(\"^(\".concat(REST$1,\")\"));class SetupLine$1 extends Line$1{constructor(setup){super();this.setup=setup;}static fromSdpLine(line){if(!SetupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SetupLine$1.regex);var setup=tokens[1];return new SetupLine$1(setup);}toSdpLine(){return \"a=setup:\".concat(this.setup);}}SetupLine$1.regex=/^setup:(actpass|active|passive)$/;class SimulcastLayer$1{constructor(id,paused){this.id=id;this.paused=paused;}toString(){return this.paused?\"~\".concat(this.id):this.id;}}class SimulcastLayerList$1{constructor(){this.layers=[];}addLayer(layer){this.layers.push([layer]);}addLayerWithAlternatives(alternatives){this.layers.push(alternatives);}get length(){return this.layers.length;}get(index){return this.layers[index];}static fromString(str){var layerList=new SimulcastLayerList$1();var tokens=str.split(';');if(tokens.length===1&&!tokens[0].trim()){throw new Error('simulcast stream list empty');}tokens.forEach(token=>{if(!token){throw new Error('simulcast layer list empty');}var ridTokens=token.split(',');var layers=[];ridTokens.forEach(ridToken=>{if(!ridToken||ridToken==='~'){throw new Error('rid empty');}var paused=ridToken[0]==='~';var rid=paused?ridToken.substring(1):ridToken;layers.push(new SimulcastLayer$1(rid,paused));});layerList.addLayerWithAlternatives(layers);});return layerList;}toString(){return this.layers.map(altArray=>altArray.map(v=>v.toString()).join(',')).join(';');}}class SimulcastLine$1 extends Line$1{constructor(sendLayers,recvLayers){super();this.sendLayers=sendLayers;this.recvLayers=recvLayers;}static fromSdpLine(line){if(!SimulcastLine$1.regex.test(line)){return undefined;}var tokens=line.match(SimulcastLine$1.regex);var bidirectional=tokens[3]&&tokens[4];var firstDirection=tokens[1];var layerList1=SimulcastLayerList$1.fromString(tokens[2]);var layerList2=new SimulcastLayerList$1();if(bidirectional){var secondDirection=tokens[3];if(firstDirection===secondDirection){return undefined;}layerList2=SimulcastLayerList$1.fromString(tokens[4]);}var sendLayerList;var recvLayerList;if(firstDirection==='send'){sendLayerList=layerList1;recvLayerList=layerList2;}else {sendLayerList=layerList2;recvLayerList=layerList1;}return new SimulcastLine$1(sendLayerList,recvLayerList);}toSdpLine(){var str='a=simulcast:';if(this.sendLayers.length){str+=\"send \".concat(this.sendLayers.toString());if(this.recvLayers.length){str+=\" \";}}if(this.recvLayers.length){str+=\"recv \".concat(this.recvLayers.toString());}return str;}}SimulcastLine$1.regex=new RegExp(\"^simulcast:(send|recv) (\".concat(ANY_NON_WS$1,\")(?: (send|recv) (\").concat(ANY_NON_WS$1,\"))?\"));class SsrcLine$1 extends Line$1{constructor(ssrcId,attribute){var attributeValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:undefined;var attributeData=arguments.length>3&&arguments[3]!==undefined?arguments[3]:undefined;super();this.ssrcId=ssrcId;this.attribute=attribute;this.attributeValue=attributeValue;this.attributeData=attributeData;}static fromSdpLine(line){if(!SsrcLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcLine$1.regex);var ssrcId=parseInt(tokens[1],10);var attribute=tokens[2];var attributeValue=tokens[3];var attributeData=tokens[4];return new SsrcLine$1(ssrcId,attribute,attributeValue,attributeData);}toSdpLine(){var str=\"a=ssrc:\".concat(this.ssrcId,\" \").concat(this.attribute);if(this.attributeValue){str+=\":\".concat(this.attributeValue);}if(this.attributeData){str+=\" \".concat(this.attributeData);}return str;}}SsrcLine$1.regex=new RegExp(\"^ssrc:(\".concat(NUM$1,\") (\").concat(SDP_TOKEN$1,\")(?::(\").concat(SDP_TOKEN$1,\")?(?: (\").concat(ANY_NON_WS$1,\"))?)?$\"));class SsrcGroupLine$1 extends Line$1{constructor(semantics,ssrcs){super();this.semantics=semantics;this.ssrcs=ssrcs;}static fromSdpLine(line){if(!SsrcGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcGroupLine$1.regex);var semantics=tokens[1];var ssrcs=tokens[2].split(' ').map(ssrcStr=>parseInt(ssrcStr,10));return new SsrcGroupLine$1(semantics,ssrcs);}toSdpLine(){return \"a=ssrc-group:\".concat(this.semantics,\" \").concat(this.ssrcs.join(' '));}}SsrcGroupLine$1.regex=new RegExp(\"^ssrc-group:(SIM|FID|FEC) ((?:\".concat(NUM$1).concat(SP$1,\"*)+)\"));class TimingLine$1 extends Line$1{constructor(startTime,stopTime){super();this.startTime=startTime;this.stopTime=stopTime;}static fromSdpLine(line){if(!TimingLine$1.regex.test(line)){return undefined;}var tokens=line.match(TimingLine$1.regex);var startTime=parseInt(tokens[1],10);var stopTime=parseInt(tokens[2],10);return new TimingLine$1(startTime,stopTime);}toSdpLine(){return \"t=\".concat(this.startTime,\" \").concat(this.stopTime);}}TimingLine$1.regex=new RegExp(\"^(\".concat(NUM$1,\") (\").concat(NUM$1,\")\"));class VersionLine$1 extends Line$1{constructor(version){super();this.version=version;}static fromSdpLine(line){if(!VersionLine$1.regex.test(line)){return undefined;}var tokens=line.match(VersionLine$1.regex);var version=parseInt(tokens[1],10);return new VersionLine$1(version);}toSdpLine(){return \"v=\".concat(this.version);}}VersionLine$1.regex=new RegExp(\"^(\".concat(NUM$1,\")$\"));class UnknownLine$1 extends Line$1{constructor(value){super();this.value=value;}static fromSdpLine(line){var tokens=line.match(UnknownLine$1.regex);var value=tokens[1];return new UnknownLine$1(value);}toSdpLine(){return \"\".concat(this.value);}}UnknownLine$1.regex=new RegExp(\"(\".concat(REST$1,\")\"));class IceInfo$1{constructor(){this.candidates=[];}addLine(line){if(line instanceof IceUfragLine$1){this.ufrag=line;return true;}if(line instanceof IcePwdLine$1){this.pwd=line;return true;}if(line instanceof IceOptionsLine$1){this.options=line;return true;}if(line instanceof CandidateLine$1){this.candidates.push(line);return true;}return false;}toLines(){var lines=[];if(this.ufrag){lines.push(this.ufrag);}if(this.pwd){lines.push(this.pwd);}if(this.options){lines.push(this.options);}this.candidates.forEach(candidate=>lines.push(candidate));return lines;}}class MediaDescription$1{constructor(type,port,protocol){this.iceInfo=new IceInfo$1();this.otherLines=[];this.type=type;this.port=port;this.protocol=protocol;}findOtherLine(ty){return this.otherLines.find(line=>line instanceof ty);}addLine(line){if(line instanceof BundleGroupLine$1){throw new Error(\"Error: bundle group line not allowed in media description\");}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof MidLine$1){this.mid=line.mid;return true;}if(line instanceof FingerprintLine$1){this.fingerprint=line.fingerprint;return true;}if(line instanceof SetupLine$1){this.setup=line.setup;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof ContentLine$1){this.content=line;return true;}return this.iceInfo.addLine(line);}}class ApplicationMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.fmts=[];this.fmts=mediaLine.formats;}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.fmts));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.content){lines.push(this.content);}if(this.sctpPort){lines.push(new SctpPortLine$1(this.sctpPort));}if(this.maxMessageSize){lines.push(new MaxMessageSizeLine$1(this.maxMessageSize));}lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof SctpPortLine$1){this.sctpPort=line.port;return true;}if(line instanceof MaxMessageSizeLine$1){this.maxMessageSize=line.maxMessageSize;return true;}this.otherLines.push(line);return true;}}class CodecInfo$2{constructor(pt){this.fmtParams=new Map();this.feedback=[];this.pt=pt;}addLine(line){if(line instanceof RtpMapLine$1){this.name=line.encodingName;this.clockRate=line.clockRate;this.encodingParams=line.encodingParams;return true;}if(line instanceof FmtpLine$1){this.fmtParams=new Map([...Array.from(this.fmtParams.entries()),...Array.from(line.params.entries())]);if(line.params.has('apt')){var apt=line.params.get('apt');this.primaryCodecPt=parseInt(apt,10);}return true;}if(line instanceof RtcpFbLine$1){this.feedback.push(line.feedback);return true;}return false;}toLines(){var lines=[];if(this.name&&this.clockRate){lines.push(new RtpMapLine$1(this.pt,this.name,this.clockRate,this.encodingParams));}this.feedback.forEach(fb=>{lines.push(new RtcpFbLine$1(this.pt,fb));});if(this.fmtParams.size>0){lines.push(new FmtpLine$1(this.pt,this.fmtParams));}return lines;}}class AvMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.pts=[];this.extMaps=new Map();this.rids=[];this.codecs=new Map();this.rtcpMux=false;this.ssrcs=[];this.ssrcGroups=[];this.pts=mediaLine.formats.map(fmt=>{return parseInt(fmt,10);});this.pts.forEach(pt=>this.codecs.set(pt,new CodecInfo$2(pt)));}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.pts.map(pt=>\"\".concat(pt))));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.rtcpMux){lines.push(new RtcpMuxLine$1());}if(this.content){lines.push(this.content);}this.extMaps.forEach(extMap=>lines.push(extMap));this.rids.forEach(rid=>lines.push(rid));if(this.simulcast){lines.push(this.simulcast);}if(this.direction){lines.push(new DirectionLine$1(this.direction));}this.codecs.forEach(codec=>lines.push(...codec.toLines()));lines.push(...this.ssrcs);lines.push(...this.ssrcGroups);lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof DirectionLine$1){this.direction=line.direction;return true;}if(line instanceof ExtMapLine$1){if(this.extMaps.has(line.id)){throw new Error(\"Tried to extension with duplicate ID: an extension already exists with ID \".concat(line.id));}this.extMaps.set(line.id,line);return true;}if(line instanceof RidLine$1){this.rids.push(line);return true;}if(line instanceof RtcpMuxLine$1){this.rtcpMux=true;return true;}if(line instanceof SimulcastLine$1){this.simulcast=line;return true;}if(line instanceof RtpMapLine$1||line instanceof FmtpLine$1||line instanceof RtcpFbLine$1){var codec=this.codecs.get(line.payloadType);if(!codec){throw new Error(\"Error: got line for unknown codec: \".concat(line.toSdpLine()));}codec.addLine(line);return true;}if(line instanceof SsrcLine$1){this.ssrcs.push(line);return true;}if(line instanceof SsrcGroupLine$1){this.ssrcGroups.push(line);return true;}this.otherLines.push(line);return true;}getCodecByPt(pt){return this.codecs.get(pt);}removePt(pt){var associatedPts=[...this.codecs.values()].filter(ci=>ci.primaryCodecPt===pt).map(ci=>ci.pt);var allPtsToRemove=[pt,...associatedPts];allPtsToRemove.forEach(ptToRemove=>{this.codecs.delete(ptToRemove);});this.pts=this.pts.filter(existingPt=>allPtsToRemove.indexOf(existingPt)===-1);}addExtension(_ref){var{uri,direction,attributes,id}=_ref;var getFirstFreeId=()=>{var freeId=1;for(;;){if(!this.extMaps.has(freeId)){break;}freeId+=1;}return freeId;};var extId=id||getFirstFreeId();if(this.extMaps.has(extId)){throw new Error(\"Extension with ID \".concat(id,\" already exists\"));}if(extId===0){throw new Error(\"Extension ID 0 is reserved\");}this.extMaps.set(extId,new ExtMapLine$1(extId,uri,direction,attributes));}}class SessionDescription$1{constructor(){this.groups=[];this.otherLines=[];}addLine(line){if(line instanceof VersionLine$1){this.version=line;return true;}if(line instanceof OriginLine$1){this.origin=line;return true;}if(line instanceof SessionNameLine$1){this.sessionName=line;return true;}if(line instanceof SessionInformationLine$1){this.information=line;return true;}if(line instanceof TimingLine$1){this.timing=line;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof BundleGroupLine$1){this.groups.push(line);return true;}this.otherLines.push(line);return true;}toLines(){var lines=[];if(this.version){lines.push(this.version);}if(this.origin){lines.push(this.origin);}if(this.sessionName){lines.push(this.sessionName);}if(this.information){lines.push(this.information);}if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}if(this.timing){lines.push(this.timing);}if(this.groups){lines.push(...this.groups);}lines.push(...this.otherLines);return lines;}}class Sdp$1{constructor(){this.session=new SessionDescription$1();this.media=[];}get avMedia(){return this.media.filter(mi=>mi instanceof AvMediaDescription$1);}toString(){var lines=[];lines.push(...this.session.toLines());this.media.forEach(m=>lines.push(...m.toLines()));return \"\".concat(lines.map(l=>l.toSdpLine()).join('\\r\\n'),\"\\r\\n\");}}class Grammar$1{constructor(){this.parsers=new Map();}addParser(lineType,parser){var parsers=this.parsers.get(lineType)||[];parsers.push(parser);this.parsers.set(lineType,parsers);}getParsers(lineType){return this.parsers.get(lineType)||[];}}class SdpGrammar$1 extends Grammar$1{constructor(){super();this.addParser('v',VersionLine$1.fromSdpLine);this.addParser('o',OriginLine$1.fromSdpLine);this.addParser('c',ConnectionLine$1.fromSdpLine);this.addParser('i',SessionInformationLine$1.fromSdpLine);this.addParser('m',MediaLine$1.fromSdpLine);this.addParser('s',SessionNameLine$1.fromSdpLine);this.addParser('t',TimingLine$1.fromSdpLine);this.addParser('b',BandwidthLine$1.fromSdpLine);this.addParser('a',RtpMapLine$1.fromSdpLine);this.addParser('a',RtcpFbLine$1.fromSdpLine);this.addParser('a',FmtpLine$1.fromSdpLine);this.addParser('a',DirectionLine$1.fromSdpLine);this.addParser('a',ExtMapLine$1.fromSdpLine);this.addParser('a',MidLine$1.fromSdpLine);this.addParser('a',IceUfragLine$1.fromSdpLine);this.addParser('a',IcePwdLine$1.fromSdpLine);this.addParser('a',IceOptionsLine$1.fromSdpLine);this.addParser('a',FingerprintLine$1.fromSdpLine);this.addParser('a',SetupLine$1.fromSdpLine);this.addParser('a',SctpPortLine$1.fromSdpLine);this.addParser('a',MaxMessageSizeLine$1.fromSdpLine);this.addParser('a',RtcpMuxLine$1.fromSdpLine);this.addParser('a',BundleGroupLine$1.fromSdpLine);this.addParser('a',ContentLine$1.fromSdpLine);this.addParser('a',RidLine$1.fromSdpLine);this.addParser('a',CandidateLine$1.fromSdpLine);this.addParser('a',SimulcastLine$1.fromSdpLine);this.addParser('a',SsrcLine$1.fromSdpLine);this.addParser('a',SsrcGroupLine$1.fromSdpLine);}}var DefaultSdpGrammar$1=new SdpGrammar$1();function isValidLine$1(line){return line.length>2;}function parseToModel$1(lines){var sdp=new Sdp$1();var currBlock=sdp.session;lines.forEach(l=>{if(l instanceof MediaLine$1){var mediaInfo;if(l.type==='audio'||l.type==='video'){mediaInfo=new AvMediaDescription$1(l);}else if(l.type==='application'){mediaInfo=new ApplicationMediaDescription$1(l);}else {throw new Error(\"Unhandled media type: \".concat(l.type));}sdp.media.push(mediaInfo);currBlock=mediaInfo;}else {currBlock.addLine(l);}});return sdp;}function parseToLines$1(sdp,grammar){var lines=[];sdp.split(/(\\r\\n|\\r|\\n)/).filter(isValidLine$1).forEach(l=>{var lineType=l[0];var lineValue=l.slice(2);var parsers=grammar.getParsers(lineType);for(var parser of parsers){var _result=parser(lineValue);if(_result){lines.push(_result);return;}}var result=UnknownLine$1.fromSdpLine(l);lines.push(result);});return lines;}function parse$1(sdp){var grammar=arguments.length>1&&arguments[1]!==undefined?arguments[1]:DefaultSdpGrammar$1;var lines=parseToLines$1(sdp,grammar);var parsed=parseToModel$1(lines);return parsed;}function disableRtcpFbValue(sdpOrAv,rtcpFbValue){var mediaDescriptions=sdpOrAv instanceof Sdp$1?sdpOrAv.avMedia:[sdpOrAv];mediaDescriptions.forEach(media=>{media.codecs.forEach(codec=>{codec.feedback=codec.feedback.filter(fb=>fb!==rtcpFbValue);});});}function disableTwcc(sdpOrAv){disableRtcpFbValue(sdpOrAv,'transport-cc');}function retainCodecs(av,predicate){var filtered=false;av.codecs.forEach(codecInfo=>{if(!predicate(codecInfo)){av.removePt(codecInfo.pt);filtered=true;}});return filtered;}function retainCodecsByCodecName(av,allowedCodecNames){var allowedLowerCase=allowedCodecNames.map(s=>s.toLowerCase());return retainCodecs(av,codecInfo=>!!codecInfo.name&&allowedLowerCase.includes(codecInfo.name.toLowerCase()));}function retainCandidates(sdpOrMedia,predicate){var mediaDescriptions=sdpOrMedia instanceof Sdp$1?sdpOrMedia.media:[sdpOrMedia];var filtered=false;mediaDescriptions.forEach(media=>{media.iceInfo.candidates=media.iceInfo.candidates.filter(candidate=>{if(predicate(candidate)){return true;}filtered=true;return false;});});return filtered;}function retainCandidatesByTransportType(sdpOrMedia,allowedTransportTypes){var allowedLowerCase=allowedTransportTypes.map(s=>s.toLowerCase());return retainCandidates(sdpOrMedia,candidate=>allowedLowerCase.includes(candidate.transport.toLowerCase()));}function hasCodec(codecName,mLine){return [...mLine.codecs.values()].some(ci=>{var _a;return ((_a=ci.name)===null||_a===void 0?void 0:_a.toLowerCase())===codecName.toLowerCase();});}var commonjsGlobal$4=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};function getDefaultExportFromCjs$2(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;}var es5$2={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal$4,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,\"a\",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p=\"\",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||\"\";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||\"\";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case\"NT\":return \"NT\";case\"XP\":return \"XP\";case\"NT 5.0\":return \"2000\";case\"NT 5.1\":return \"XP\";case\"NT 5.2\":return \"2003\";case\"NT 6.0\":return \"Vista\";case\"NT 6.1\":return \"7\";case\"NT 6.2\":return \"8\";case\"NT 6.3\":return \"8.1\";case\"NT 10.0\":return \"10\";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(\".\").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return \"Leopard\";case 6:return \"Snow Leopard\";case 7:return \"Lion\";case 8:return \"Mountain Lion\";case 9:return \"Mavericks\";case 10:return \"Yosemite\";case 11:return \"El Capitan\";case 12:return \"Sierra\";case 13:return \"High Sierra\";case 14:return \"Mojave\";case 15:return \"Catalina\";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(\".\").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?\"Cupcake\":1===t[0]&&t[1]>=6?\"Donut\":2===t[0]&&t[1]<2?\"Eclair\":2===t[0]&&2===t[1]?\"Froyo\":2===t[0]&&t[1]>2?\"Gingerbread\":3===t[0]?\"Honeycomb\":4===t[0]&&t[1]<1?\"Ice Cream Sandwich\":4===t[0]&&t[1]<4?\"Jelly Bean\":4===t[0]&&t[1]>=4?\"KitKat\":5===t[0]?\"Lollipop\":6===t[0]?\"Marshmallow\":7===t[0]?\"Nougat\":8===t[0]?\"Oreo\":9===t[0]?\"Pie\":void 0;},e.getVersionPrecision=function(e){return e.split(\".\").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(\".0\");return e.map(n.split(\".\"),function(e){return new Array(20-e.length).join(\"0\")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]1?i-1:0),a=1;a0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if(\"string\"==typeof i)return \">\"===e[0]||\"<\"===e[0]?(r=e.substr(1),\"=\"===e[1]?(n=!0,r=e.substr(2)):t=[],\">\"===e[0]?t.push(1):t.push(-1)):\"=\"===e[0]?r=e.substr(1):\"~\"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\\/(\\d+(\\.?_?\\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:\"Googlebot\"},r=i.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\\/|opios/i],describe:function describe(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:\"Samsung Internet for Android\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:\"NAVER Whale Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:\"MZ Browser\"},r=i.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:\"Focus\"},r=i.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:\"Swing\"},r=i.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:\"Opera Coast\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\\/\\d+(?:.?_?\\d+)+/i],describe:function describe(e){var t={name:\"Opera Touch\"},r=i.default.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:\"Yandex Browser\"},r=i.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:\"UC Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:\"Maxthon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:\"Epiphany\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:\"Puffin\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:\"Sleipnir\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:\"K-Meleon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:\"WeChat\"},r=i.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?\"QQ Browser Lite\":\"QQ Browser\"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:\"Internet Explorer\"},r=i.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\\sedg\\//i],describe:function describe(e){var t={name:\"Microsoft Edge\"},r=i.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:\"Microsoft Edge\"},r=i.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:\"Vivaldi\"},r=i.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:\"SeaMonkey\"},r=i.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:\"Sailfish\"},r=i.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:\"Amazon Silk\"},r=i.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:\"PhantomJS\"},r=i.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:\"SlimerJS\"},r=i.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function describe(e){var t={name:\"BlackBerry\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:\"WebOS Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:\"Bada\"},r=i.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:\"Tizen\"},r=i.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:\"QupZilla\"},r=i.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:\"Firefox\"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:\"Electron\"},r=i.default.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:\"Miui\"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:\"Chromium\"},r=i.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:\"Chrome\"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:\"Google Search\"},r=i.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:\"Android Browser\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:\"PlayStation 4\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:\"Safari\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,\".\"),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,\".\");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||i.default.getFirstMatch(/\\bbb(\\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:\"bot\",vendor:\"Google\"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&\"Nova\",r={type:s.PLATFORMS_MAP.mobile,vendor:\"Huawei\"};return t&&(r.model=t),r;}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Nexus\"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\",model:\"Kindle Fire HD 7\"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:\"Apple\",model:t};}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:\"Nexus\"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return \"blackberry\"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:\"BlackBerry\"};}},{test:function test(e){return \"bada\"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return \"windows phone\"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:\"Microsoft\"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(\".\")[0]);return \"android\"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return \"android\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return \"macos\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:\"Apple\"};}},{test:function test(e){return \"windows\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return \"linux\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return \"playstation 4\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return \"roku\"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return \"microsoft edge\"===e.getBrowserName(!0);},describe:function describe(e){if(/\\sedg\\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\\/537\\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5$2);var Bowser$2=/*@__PURE__*/getDefaultExportFromCjs$2(es5$2.exports);var BrowserName$2;(function(BrowserName){BrowserName[\"CHROME\"]=\"Chrome\";BrowserName[\"FIREFOX\"]=\"Firefox\";BrowserName[\"EDGE\"]=\"Microsoft Edge\";BrowserName[\"SAFARI\"]=\"Safari\";})(BrowserName$2||(BrowserName$2={}));var OSName$1;(function(OSName){OSName[\"WINDOWS\"]=\"Windows\";OSName[\"MAC\"]=\"macOS\";OSName[\"LINUX\"]=\"Linux\";})(OSName$1||(OSName$1={}));class BrowserInfo{static getBrowserDetails(){return this.browser.getBrowser();}static getOSDetails(){return this.browser.getOS();}static getPlatformDetails(){return this.browser.getPlatform();}static getEngineDetails(){return this.browser.getEngine();}static isChrome(){return this.browser.getBrowserName()===BrowserName$2.CHROME;}static isFirefox(){return this.browser.getBrowserName()===BrowserName$2.FIREFOX;}static isEdge(){return this.browser.getBrowserName()===BrowserName$2.EDGE;}static isSafari(){return this.browser.getBrowserName()===BrowserName$2.SAFARI;}static isWindows(){return this.browser.getOSName()===OSName$1.WINDOWS;}static isMac(){return this.browser.getOSName()===OSName$1.MAC;}static isLinux(){return this.browser.getOSName()===OSName$1.LINUX;}static isVersionGreaterThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\">\".concat(version)};return this.browser.satisfies(checkTree);}static isVersionGreaterThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\">=\".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\"<\".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\"<=\".concat(version)};return this.browser.satisfies(checkTree);}static isSubVersionOf(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:\"~\".concat(version)};return this.browser.satisfies(checkTree);}}BrowserInfo.browser=Bowser$2.getParser(window.navigator.userAgent);var CapabilityState$2;(function(CapabilityState){CapabilityState[\"NOT_CAPABLE\"]=\"not capable\";CapabilityState[\"CAPABLE\"]=\"capable\";CapabilityState[\"UNKNOWN\"]=\"unknown\";})(CapabilityState$2||(CapabilityState$2={}));var simulcastMaxFrameSizes={0:'240',1:'2304',2:'8160'};class JmpLine extends Line$1{static fromSdpLine(line){if(!JmpLine.regex.test(line)){return undefined;}var tokens=line.match(JmpLine.regex);var versions=tokens[1].split(',').filter(v=>v.length);return new JmpLine(versions);}constructor(versions){super();this.versions=versions;}toSdpLine(){return \"a=jmp:\".concat(this.versions.join(','));}}JmpLine.regex=/^jmp:((?:v\\d+,?)+)/;class JmpStreamIdModeLine extends Line$1{constructor(streamIdMode){super();this.streamIdMode=streamIdMode;}static fromSdpLine(line){if(!JmpStreamIdModeLine.regex.test(line)){return undefined;}var tokens=line.match(JmpStreamIdModeLine.regex);var mode=tokens[1];return new JmpStreamIdModeLine(mode);}toSdpLine(){return \"a=jmp-stream-id-mode:\".concat(this.streamIdMode);}}JmpStreamIdModeLine.regex=/^jmp-stream-id-mode:(MID-RID|SSRC)$/;class JmpSourceLine extends Line$1{constructor(source,csi){super();this.source=source;this.csi=csi;}static fromSdpLine(line){if(!JmpSourceLine.regex.test(line)){return undefined;}var tokens=line.match(JmpSourceLine.regex);var source=tokens[1];var csi=tokens[2];return new JmpSourceLine(source,csi);}toSdpLine(){var line=\"a=jmp-source:\".concat(this.source);if(this.csi){line+=\" csi=\".concat(this.csi);}return line;}}JmpSourceLine.regex=new RegExp(\"^jmp-source:(\".concat(ANY_NON_WS$1,\") (?:csi=(\").concat(ANY_NON_WS$1,\"))\"));DefaultSdpGrammar$1.addParser('a',JmpLine.fromSdpLine);DefaultSdpGrammar$1.addParser('a',JmpSourceLine.fromSdpLine);DefaultSdpGrammar$1.addParser('a',JmpStreamIdModeLine.fromSdpLine);function deepCopy(source){return Array.isArray(source)?source.map(item=>deepCopy(item)):source instanceof Map?new Map(source):source instanceof Date?new Date(source.getTime()):source&&typeof source==='object'?Object.getOwnPropertyNames(source).reduce((o,prop)=>{Object.defineProperty(o,prop,Object.getOwnPropertyDescriptor(source,prop));o[prop]=deepCopy(source[prop]);return o;},Object.create(Object.getPrototypeOf(source))):source;}var ipv4Regex=/(\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.)(\\d{1,3}\\b)/g;var ipv6Regex=/(\\b[\\da-fA-F]{1,4}(:[\\da-fA-F]{1,4}){7}\\b)/g;function matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer){parsedAnswer.session.groups=parsedOffer.session.groups;parsedAnswer.media=parsedOffer.media.map(offerMediaDescription=>{if(!offerMediaDescription.mid){logErrorAndThrow(WcmeErrorType.OFFER_ANSWER_MISMATCH,\"Named media groups can only be set for audio.\");}var answerMediaDescription=parsedAnswer.media.find(m=>m.mid===offerMediaDescription.mid);if(answerMediaDescription){return answerMediaDescription;}if(!(offerMediaDescription instanceof AvMediaDescription$1)){logErrorAndThrow(WcmeErrorType.OFFER_ANSWER_MISMATCH,\"Answer is missing a non-AV media description for MID \".concat(offerMediaDescription.mid,\".\"));}var startingMediaDescription=parsedAnswer.avMedia.find(m=>m.type===offerMediaDescription.type);if(!startingMediaDescription){logErrorAndThrow(WcmeErrorType.OFFER_ANSWER_MISMATCH,\"Answer has no media description of type \".concat(offerMediaDescription.type,\", can't generate synthetic answer media description for MID \").concat(offerMediaDescription.mid,\".\"));}var fakeCorrespondingDescription=deepCopy(startingMediaDescription);fakeCorrespondingDescription.mid=offerMediaDescription.mid;fakeCorrespondingDescription.simulcast=undefined;fakeCorrespondingDescription.bandwidth=undefined;if(offerMediaDescription.direction==='sendrecv'||offerMediaDescription.direction==='sendonly'){fakeCorrespondingDescription.direction='recvonly';}if(offerMediaDescription.direction==='recvonly'){fakeCorrespondingDescription.direction='sendonly';}return fakeCorrespondingDescription;});}function setupBundle(parsedSdp,bundlePolicy,midMap){if(bundlePolicy==='max-compat'){var audioMainMids=midMap.get(MediaType.AudioMain);var videoMainMids=midMap.get(MediaType.VideoMain);var audioContentMids=midMap.get(MediaType.AudioSlides);var videoContentMids=midMap.get(MediaType.VideoSlides);parsedSdp.session.groups.splice(0,parsedSdp.session.groups.length);if(audioMainMids){parsedSdp.session.groups.push(new BundleGroupLine$1(audioMainMids));}if(videoMainMids){parsedSdp.session.groups.push(new BundleGroupLine$1(videoMainMids));}if(audioContentMids){parsedSdp.session.groups.push(new BundleGroupLine$1(audioContentMids));}if(videoContentMids){parsedSdp.session.groups.push(new BundleGroupLine$1(videoContentMids));}}}function filterRecvOnlyMediaDescriptions(parsedSdp){var filteredMids=[];parsedSdp.media=parsedSdp.media.filter(media=>{if(media instanceof ApplicationMediaDescription$1||media instanceof AvMediaDescription$1&&media.direction!=='recvonly'){filteredMids.push(media.mid);return true;}return false;});parsedSdp.session.groups.forEach(g=>{g.mids=g.mids.filter(m=>filteredMids.includes(m));});}function injectContentType(mediaDescription,mediaContent){if(mediaContent===MediaContent.Slides){mediaDescription.addLine(new ContentLine$1(['slides']));}}function injectJmpAttributes(mediaDescription,csi,streamSignalingMode){if(!mediaDescription.otherLines.find(line=>line instanceof JmpLine)){mediaDescription.addLine(new JmpLine(['v1']));}if(!mediaDescription.otherLines.find(line=>line instanceof JmpSourceLine)){mediaDescription.addLine(new JmpSourceLine(mediaDescription.mid,csi.toString()));}if(!mediaDescription.otherLines.find(line=>line instanceof JmpStreamIdModeLine)){mediaDescription.addLine(new JmpStreamIdModeLine(streamSignalingMode));}}function injectDummyCandidates(mediaDescription){mediaDescription.iceInfo.candidates=[];mediaDescription.addLine(new CandidateLine$1('dummy1',1,'udp',3,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy2',1,'tcp',2,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy3',1,'udp',1,'0.0.0.0',9,'relay'));}function maskIp(sdp){var maskedSdp=sdp.replace(ipv4Regex,(match,firstOctets)=>{return \"\".concat(firstOctets,\"0\");});maskedSdp=maskedSdp.replace(ipv6Regex,match=>{return match.replace(/:[\\da-fA-F]{1,4}$/,':0');});return maskedSdp;}function removeMidRidExtensions(mediaDescription){mediaDescription.extMaps.forEach((extMapLine,extId,extMap)=>{if(/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri)){extMap.delete(extId);}});}function addVlaExtension(mediaDescription){var vlaExtensionUri='http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00';if(![...mediaDescription.extMaps.values()].some(extMapLine=>extMapLine.uri===vlaExtensionUri)){mediaDescription.addExtension({uri:vlaExtensionUri});}}function applyFormatParameters(mediaDescription,paramsMap){paramsMap.forEach((value,param)=>{[...mediaDescription.codecs.values()].filter(ci=>ci.name==='H264'||ci.name==='opus').forEach(ci=>{if(value===null){ci.fmtParams.delete(param);}else {ci.fmtParams.set(param,\"\".concat(value));}});});}function hasIceCandidates(sdp){return sdp.media.some(media=>media.iceInfo.candidates.length);}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}class EgressSdpMunger{constructor(){this.streamIds=[];this.customCodecParameters=new Map();}reset(){this.streamIds=[];}mungeLocalDescription(mediaDescription,options){var _a;retainCodecsByCodecName(mediaDescription,['h264','opus','rtx']);if(options.forceSoftwareEncoder){var isH264Cbp=codecInfo=>{var _a;if(((_a=codecInfo.name)===null||_a===void 0?void 0:_a.toLowerCase())==='h264'){var profileLevelId=codecInfo.fmtParams.get('profile-level-id');return !!profileLevelId&&/^42[^0]/.test(profileLevelId);}return false;};if([...mediaDescription.codecs.values()].some(isH264Cbp)){retainCodecs(mediaDescription,codecInfo=>{var _a;return ((_a=codecInfo.name)===null||_a===void 0?void 0:_a.toLowerCase())!=='h264'||isH264Cbp(codecInfo);});}else {logger.log(\"No H.264 CBP present in m-line with MID \".concat(mediaDescription.mid,\", so all H.264 codecs have been retained.\"));}}if(mediaDescription.codecs.size===0){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_MISSING_CODECS,\"No codecs present in m-line with MID \".concat(mediaDescription.mid,\" after filtering.\"));}mediaDescription.rids=[];mediaDescription.simulcast=undefined;removeMidRidExtensions(mediaDescription);if(options.simulcastEnabled){addVlaExtension(mediaDescription);}var numStreams=options.simulcastEnabled?3:1;if(!this.streamIds.length){if(mediaDescription.ssrcs.length){var ssrcs=[...new Set(mediaDescription.ssrcs.map(ssrcLine=>ssrcLine.ssrcId))];mediaDescription.ssrcGroups.forEach(sg=>{if(!sg.ssrcs.every(ssrc=>ssrcs.includes(ssrc))){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,'SSRC present in SSRC groups is missing from SSRC lines.');}});var rtxSsrcGroups=mediaDescription.ssrcGroups.filter(sg=>sg.semantics==='FID');if(rtxSsrcGroups.length&&rtxSsrcGroups.length!==numStreams){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,\"Expected \".concat(numStreams,\" RTX SSRC groups, got \").concat(rtxSsrcGroups.length,\".\"));}rtxSsrcGroups.forEach(sg=>{this.streamIds.push({ssrc:sg.ssrcs[0],rtxSsrc:sg.ssrcs[1]});});var simulcastSsrcs=(_a=mediaDescription.ssrcGroups.find(sg=>sg.semantics==='SIM'))===null||_a===void 0?void 0:_a.ssrcs;if(simulcastSsrcs){if(simulcastSsrcs.length!==numStreams||!this.streamIds.every(_ref2=>{var{ssrc}=_ref2;return simulcastSsrcs.includes(ssrc);})){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,'SSRCs in simulcast SSRC group do not match primary SSRCs in RTX SSRC groups.');}this.streamIds.sort((a,b)=>simulcastSsrcs.indexOf(a.ssrc)-simulcastSsrcs.indexOf(b.ssrc));}else if(rtxSsrcGroups.length>1){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,'Multiple RTX SSRC groups but no simulcast SSRC group found.');}if(!this.streamIds.length){this.streamIds.push({ssrc:ssrcs[0]});}}else {[...Array(numStreams).keys()].forEach(()=>{var newStreamId={ssrc:generateSsrc()};if(options.rtxEnabled){newStreamId.rtxSsrc=generateSsrc();}this.streamIds.push(newStreamId);});}}mediaDescription.ssrcs=[];mediaDescription.ssrcGroups=[];this.streamIds.forEach(streamId=>{var rtpSsrc=streamId.ssrc;mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'cname',\"\".concat(rtpSsrc,\"-cname\")));mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'msid','-',\"\".concat(mediaDescription.mid)));if(options.rtxEnabled){var{rtxSsrc}=streamId;if(rtxSsrc){mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'cname',\"\".concat(rtpSsrc,\"-cname\")));mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'msid','-',\"\".concat(mediaDescription.mid)));mediaDescription.addLine(new SsrcGroupLine$1('FID',[rtpSsrc,rtxSsrc]));}}});if(options.simulcastEnabled){mediaDescription.addLine(new SsrcGroupLine$1('SIM',this.streamIds.map(streamId=>streamId.ssrc)));}applyFormatParameters(mediaDescription,this.customCodecParameters);if(options.twccDisabled){disableTwcc(mediaDescription);}}mungeLocalDescriptionForRemoteServer(mediaDescription,mediaContent,csi){var mungeOptions=arguments.length>3&&arguments[3]!==undefined?arguments[3]:{injectDummyCandidates:true};injectContentType(mediaDescription,mediaContent);injectJmpAttributes(mediaDescription,csi,'SSRC');if(mungeOptions.injectDummyCandidates){injectDummyCandidates(mediaDescription);}if(mediaDescription.type==='video'){var ssrcGroup=mediaDescription.ssrcGroups.find(sg=>sg.semantics==='SIM');if(ssrcGroup){ssrcGroup.ssrcs.forEach((ssrc,index)=>{mediaDescription.addLine(new SsrcLine$1(ssrc,'fmtp',\"* max-fs=\".concat(simulcastMaxFrameSizes[index])));});}}}mungeRemoteDescription(mediaDescription){if(retainCandidatesByTransportType(mediaDescription,['udp','tcp'])){logger.log(\"Some unsupported remote candidates have been removed from mid \".concat(mediaDescription.mid));}mediaDescription.bandwidth=undefined;[...mediaDescription.codecs.values()].forEach(ci=>{ci.fmtParams.set('x-google-start-bitrate','60000');});}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>areStreamIdsEqual(currStreamId,streamId));}setCodecParameters(parameters){Object.entries(parameters).forEach(_ref3=>{var[param,value]=_ref3;this.customCodecParameters.set(param,value);});}deleteCodecParameters(parameters){parameters.forEach(param=>{this.customCodecParameters.set(param,null);});}}var events$1={exports:{}};var R$1=typeof Reflect==='object'?Reflect:null;var ReflectApply$1=R$1&&typeof R$1.apply==='function'?R$1.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys$1;if(R$1&&typeof R$1.ownKeys==='function'){ReflectOwnKeys$1=R$1.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning$1(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN$1=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$3(){EventEmitter$3.init.call(this);}events$1.exports=EventEmitter$3;events$1.exports.once=once$2;// Backwards-compat with node 0.10.x\nEventEmitter$3.EventEmitter=EventEmitter$3;EventEmitter$3.prototype._events=undefined;EventEmitter$3.prototype._eventsCount=0;EventEmitter$3.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners$1=10;function checkListener$1(listener){if(typeof listener!=='function'){throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$3,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners$1;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN$1(arg)){throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners$1=arg;}});EventEmitter$3.init=function(){if(this._events===undefined||this._events===Object.getPrototypeOf(this)._events){this._events=Object.create(null);this._eventsCount=0;}this._maxListeners=this._maxListeners||undefined;};// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter$3.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||NumberIsNaN$1(n)){throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+n+'.');}this._maxListeners=n;return this;};function _getMaxListeners$1(that){if(that._maxListeners===undefined)return EventEmitter$3.defaultMaxListeners;return that._maxListeners;}EventEmitter$3.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners$1(this);};EventEmitter$3.prototype.emit=function emit(type){var args=[];for(var i=1;i0)er=args[0];if(er instanceof Error){// Note: The comments on the `throw` lines are intentional, they show\n// up in Node's output if this results in an unhandled exception.\nthrow er;// Unhandled 'error' event\n}// At least give some kind of context to the user\nvar err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event\n}var handler=events[type];if(handler===undefined)return false;if(typeof handler==='function'){ReflectApply$1(handler,this,args);}else {var len=handler.length;var listeners=arrayClone$1(handler,len);for(var i=0;i0&&existing.length>m&&!existing.warned){existing.warned=true;// No error code for this since it is a Warning\n// eslint-disable-next-line no-restricted-syntax\nvar w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' '+String(type)+' listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;ProcessEmitWarning$1(w);}}return target;}EventEmitter$3.prototype.addListener=function addListener(type,listener){return _addListener$1(this,type,listener,false);};EventEmitter$3.prototype.on=EventEmitter$3.prototype.addListener;EventEmitter$3.prototype.prependListener=function prependListener(type,listener){return _addListener$1(this,type,listener,true);};function onceWrapper$1(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;if(arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments);}}function _onceWrap$1(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=onceWrapper$1.bind(state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter$3.prototype.once=function once(type,listener){checkListener$1(listener);this.on(type,_onceWrap$1(this,type,listener));return this;};EventEmitter$3.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener$1(listener);this.prependListener(type,_onceWrap$1(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter$3.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;checkListener$1(listener);events=this._events;if(events===undefined)return this;list=events[type];if(list===undefined)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=Object.create(null);else {delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else {spliceOne$1(list,position);}if(list.length===1)events[type]=list[0];if(events.removeListener!==undefined)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter$3.prototype.off=EventEmitter$3.prototype.removeListener;EventEmitter$3.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(events===undefined)return this;// not listening for removeListener, no need to emit\nif(events.removeListener===undefined){if(arguments.length===0){this._events=Object.create(null);this._eventsCount=0;}else if(events[type]!==undefined){if(--this._eventsCount===0)this._events=Object.create(null);else delete events[type];}return this;}// emit removeListener for all listeners on all events\nif(arguments.length===0){var keys=Object.keys(events);var key;for(i=0;i=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners$1(target,type,unwrap){var events=target._events;if(events===undefined)return [];var evlistener=events[type];if(evlistener===undefined)return [];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners$1(evlistener):arrayClone$1(evlistener,evlistener.length);}EventEmitter$3.prototype.listeners=function listeners(type){return _listeners$1(this,type,true);};EventEmitter$3.prototype.rawListeners=function rawListeners(type){return _listeners$1(this,type,false);};EventEmitter$3.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else {return listenerCount$1.call(emitter,type);}};EventEmitter$3.prototype.listenerCount=listenerCount$1;function listenerCount$1(type){var events=this._events;if(events!==undefined){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener!==undefined){return evlistener.length;}}return 0;}EventEmitter$3.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys$1(this._events):[];};function arrayClone$1(arr,n){var copy=new Array(n);for(var i=0;i{ci.fmtParams.set('x-google-start-bitrate','60000');});}reset(){this.ssrc=generateSsrc();}}class MidPredictor{constructor(){this.currentMid=0;this.midMap=new Map();}getNextMid(mediaType){var mid=this.currentMid++;var mids=this.midMap.get(mediaType)||[];mids.push(\"\".concat(mid));this.midMap.set(mediaType,mids);return \"\".concat(mid);}allocateMidForDatachannel(){this.currentMid+=1;}reset(){this.midMap=new Map();this.currentMid=0;}getMidMap(){return this.midMap;}}var OveruseState;(function(OveruseState){OveruseState[OveruseState[\"NOT_OVERUSED\"]=0]=\"NOT_OVERUSED\";OveruseState[OveruseState[\"OVERUSED\"]=1]=\"OVERUSED\";})(OveruseState||(OveruseState={}));class OveruseStateManager{constructor(callback){this.monitors=[];this.lastOverallOveruseState=OveruseState.NOT_OVERUSED;this.isRunning=false;this.overuseUpdateCallback=callback;}addMonitor(monitor){this.monitors.push(monitor);if(this.isRunning){monitor.startMonitoring(()=>this.onMonitorOveruseUpdate());}}start(){this.isRunning=true;this.monitors.forEach(monitor=>monitor.startMonitoring(()=>this.onMonitorOveruseUpdate()));}stop(){this.isRunning=false;this.monitors.forEach(monitor=>monitor.stopMonitoring());}onMonitorOveruseUpdate(){var overuseStates=this.monitors.map(monitor=>monitor.getLastOveruseState());var overallOveruseState=overuseStates.some(overuseState=>overuseState===OveruseState.OVERUSED)?OveruseState.OVERUSED:OveruseState.NOT_OVERUSED;if(overallOveruseState!==this.lastOverallOveruseState){this.lastOverallOveruseState=overallOveruseState;this.overuseUpdateCallback(overallOveruseState);}}}var ReceiveSlotEvents;(function(ReceiveSlotEvents){ReceiveSlotEvents[\"MediaStarted\"]=\"media-started\";ReceiveSlotEvents[\"MediaStopped\"]=\"media-stopped\";ReceiveSlotEvents[\"MediaEnded\"]=\"media-ended\";ReceiveSlotEvents[\"SourceUpdate\"]=\"source-update\";})(ReceiveSlotEvents||(ReceiveSlotEvents={}));class ReceiveSlot extends EventEmitter$2{constructor(idGetter,track){super();this._idGetter=idGetter;this.handleStreamMediaStateChange=this.handleStreamMediaStateChange.bind(this);this.handleStreamEnded=this.handleStreamEnded.bind(this);this._stream=new RemoteStream(new MediaStream([track]));this._sourceState=track.kind===MediaStreamTrackKind.Video?'no source':undefined;this._stream.on(RemoteStreamEventNames.MediaStateChange,this.handleStreamMediaStateChange);this._stream.on(StreamEventNames.Ended,this.handleStreamEnded);}handleStreamMediaStateChange(state){if(state===RemoteMediaState.Stopped){this.emit(ReceiveSlotEvents.MediaStopped);}else {this.emit(ReceiveSlotEvents.MediaStarted);}}handleStreamEnded(){this.emit(ReceiveSlotEvents.MediaEnded);}_replaceTrack(newTrack){this._stream.replaceTrack(newTrack);}_updateSource(state,csi){if(state!==this._sourceState||csi!==this._currentRxCsi){this._sourceState=state;this._currentRxCsi=csi;this.emit(ReceiveSlotEvents.SourceUpdate,state,csi);}}close(){this._stream.off(RemoteStreamEventNames.MediaStateChange,this.handleStreamMediaStateChange);this._stream.off(StreamEventNames.Ended,this.handleStreamEnded);}get id(){return this._idGetter();}get stream(){return this._stream.outputStream;}get currentRxCsi(){return this._currentRxCsi;}get sourceState(){return this._sourceState;}}ReceiveSlot.Events=ReceiveSlotEvents;function getCurrentTimestamp(){return performance.timeOrigin+performance.now();}class StatsManager{constructor(statsGetter){var statsPreprocessor=arguments.length>1&&arguments[1]!==undefined?arguments[1]:()=>__awaiter$1(this,void 0,void 0,function*(){});this.statsGetter=statsGetter;this.statsPreProcessor=statsPreprocessor;}getStats(){return __awaiter$1(this,void 0,void 0,function*(){var statsReport=yield this.statsGetter();var statsMap=new Map();statsReport.forEach((stats,key)=>statsMap.set(key,stats));yield this.statsPreProcessor(statsMap);return statsMap;});}}class Transceiver{constructor(config){this.twccDisabled=false;this._rtcRtpTransceiver=config.rtcRtpTransceiver;this.mid=config.mid;this.mediaType=config.mediaType;}replaceTransceiver(newRtcRtpTransceiver){this._rtcRtpTransceiver=newRtcRtpTransceiver;}get receiver(){return this._rtcRtpTransceiver.receiver;}get sender(){return this._rtcRtpTransceiver.sender;}close(){this._rtcRtpTransceiver.stop();}}class ReceiveOnlyTransceiver extends Transceiver{constructor(config){super(config);this.metadata={isRequested:false,isActiveSpeaker:false};this.munger=config.munger;this._receiveSlot=new ReceiveSlot(()=>{if(!this._rtcRtpTransceiver.mid){return null;}return this.munger.getReceiverId();},this._rtcRtpTransceiver.receiver.track);}replaceTransceiver(newRtcRtpTransceiver){super.replaceTransceiver(newRtcRtpTransceiver);this._receiveSlot._replaceTrack(newRtcRtpTransceiver.receiver.track);}close(){super.close();this._receiveSlot.close();}get receiveSlot(){return this._receiveSlot;}getStats(){return __awaiter$1(this,void 0,void 0,function*(){var statsMap=new Map();var statsReport=yield this.receiver.getStats();statsReport.forEach((stats,key)=>{if(stats.type==='inbound-rtp'){stats.mid=this.mid;stats.csi=this.receiveSlot.currentRxCsi;stats.sourceState=this.receiveSlot.sourceState;stats.calliopeMediaType=this.mediaType;stats.requestedBitrate=this.metadata.requestedBitrate;stats.requestedFrameSize=this.metadata.requestedFrameSize;stats.requestedFrameRate=this.metadata.requestedFrameRate;stats.isRequested=this.metadata.isRequested;stats.lastRequestedUpdateTimestamp=this.metadata.lastRequestedUpdateTimestamp;stats.isActiveSpeaker=this.metadata.isActiveSpeaker;stats.lastActiveSpeakerUpdateTimestamp=this.metadata.lastActiveSpeakerUpdateTimestamp;Object.assign(stats,this.receiverId);}statsMap.set(key,stats);});return statsMap;});}mungeLocalDescription(mediaDescription){this.munger.mungeLocalDescription(mediaDescription,{twccDisabled:this.twccDisabled});}mungeRemoteDescription(mediaDescription){this.munger.mungeRemoteDescription(mediaDescription);}get receiverId(){return this.munger.getReceiverId();}resetSdpMunger(){this.munger.reset();}handleRequested(streamRequest){var _a,_b,_c,_d;if(!this.metadata.isRequested){this.metadata.isRequested=true;this.metadata.lastRequestedUpdateTimestamp=getCurrentTimestamp();}this.metadata.requestedBitrate=streamRequest.maxPayloadBitsPerSecond;this.metadata.requestedFrameSize=(_b=(_a=streamRequest.codecInfos[0])===null||_a===void 0?void 0:_a.h264)===null||_b===void 0?void 0:_b.maxFs;this.metadata.requestedFrameRate=(_d=(_c=streamRequest.codecInfos[0])===null||_c===void 0?void 0:_c.h264)===null||_d===void 0?void 0:_d.maxFps;}handleUnrequested(){if(this.metadata.isRequested){this.metadata.isRequested=false;this.metadata.lastRequestedUpdateTimestamp=getCurrentTimestamp();}this.metadata.requestedBitrate=undefined;this.metadata.requestedFrameSize=undefined;this.metadata.requestedFrameRate=undefined;this.receiveSlot._updateSource('no source',undefined);}handleActiveSpeakerUpdate(value){if(this.metadata.isActiveSpeaker!==value){this.metadata.isActiveSpeaker=value;this.metadata.lastActiveSpeakerUpdateTimestamp=getCurrentTimestamp();}}}ReceiveOnlyTransceiver.rid='1';var events={exports:{}};var R=typeof Reflect==='object'?Reflect:null;var ReflectApply=R&&typeof R.apply==='function'?R.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys;if(R&&typeof R.ownKeys==='function'){ReflectOwnKeys=R.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$1(){EventEmitter$1.init.call(this);}events.exports=EventEmitter$1;events.exports.once=once$1;// Backwards-compat with node 0.10.x\nEventEmitter$1.EventEmitter=EventEmitter$1;EventEmitter$1.prototype._events=undefined;EventEmitter$1.prototype._eventsCount=0;EventEmitter$1.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners=10;function checkListener(listener){if(typeof listener!=='function'){throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$1,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN(arg)){throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners=arg;}});EventEmitter$1.init=function(){if(this._events===undefined||this._events===Object.getPrototypeOf(this)._events){this._events=Object.create(null);this._eventsCount=0;}this._maxListeners=this._maxListeners||undefined;};// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter$1.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||NumberIsNaN(n)){throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+n+'.');}this._maxListeners=n;return this;};function _getMaxListeners(that){if(that._maxListeners===undefined)return EventEmitter$1.defaultMaxListeners;return that._maxListeners;}EventEmitter$1.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners(this);};EventEmitter$1.prototype.emit=function emit(type){var args=[];for(var i=1;i0)er=args[0];if(er instanceof Error){// Note: The comments on the `throw` lines are intentional, they show\n// up in Node's output if this results in an unhandled exception.\nthrow er;// Unhandled 'error' event\n}// At least give some kind of context to the user\nvar err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event\n}var handler=events[type];if(handler===undefined)return false;if(typeof handler==='function'){ReflectApply(handler,this,args);}else {var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i0&&existing.length>m&&!existing.warned){existing.warned=true;// No error code for this since it is a Warning\n// eslint-disable-next-line no-restricted-syntax\nvar w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' '+String(type)+' listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;ProcessEmitWarning(w);}}return target;}EventEmitter$1.prototype.addListener=function addListener(type,listener){return _addListener(this,type,listener,false);};EventEmitter$1.prototype.on=EventEmitter$1.prototype.addListener;EventEmitter$1.prototype.prependListener=function prependListener(type,listener){return _addListener(this,type,listener,true);};function onceWrapper(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;if(arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments);}}function _onceWrap(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=onceWrapper.bind(state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter$1.prototype.once=function once(type,listener){checkListener(listener);this.on(type,_onceWrap(this,type,listener));return this;};EventEmitter$1.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener(listener);this.prependListener(type,_onceWrap(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter$1.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;checkListener(listener);events=this._events;if(events===undefined)return this;list=events[type];if(list===undefined)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=Object.create(null);else {delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else {spliceOne(list,position);}if(list.length===1)events[type]=list[0];if(events.removeListener!==undefined)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter$1.prototype.off=EventEmitter$1.prototype.removeListener;EventEmitter$1.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(events===undefined)return this;// not listening for removeListener, no need to emit\nif(events.removeListener===undefined){if(arguments.length===0){this._events=Object.create(null);this._eventsCount=0;}else if(events[type]!==undefined){if(--this._eventsCount===0)this._events=Object.create(null);else delete events[type];}return this;}// emit removeListener for all listeners on all events\nif(arguments.length===0){var keys=Object.keys(events);var key;for(i=0;i=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners(target,type,unwrap){var events=target._events;if(events===undefined)return [];var evlistener=events[type];if(evlistener===undefined)return [];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners(evlistener):arrayClone(evlistener,evlistener.length);}EventEmitter$1.prototype.listeners=function listeners(type){return _listeners(this,type,true);};EventEmitter$1.prototype.rawListeners=function rawListeners(type){return _listeners(this,type,false);};EventEmitter$1.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else {return listenerCount.call(emitter,type);}};EventEmitter$1.prototype.listenerCount=listenerCount;function listenerCount(type){var events=this._events;if(events!==undefined){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener!==undefined){return evlistener.length;}}return 0;}EventEmitter$1.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys(this._events):[];};function arrayClone(arr,n){var copy=new Array(n);for(var i=0;i var fn = async.apply(sys.puts, 'one');\n * node> fn('two', 'three');\n * one\n * two\n * three\n */function initialParams(fn){return function(){for(var _len5=arguments.length,args=new Array(_len5),_key5=0;_key5<_len5;_key5++){args[_key5]=arguments[_key5];}var callback=args.pop();return fn.call(this,args,callback);};}/* istanbul ignore file */var hasQueueMicrotask=typeof queueMicrotask==='function'&&queueMicrotask;var hasSetImmediate=typeof setImmediate==='function'&&setImmediate;var hasNextTick=typeof browser$1==='object'&&typeof browser$1.nextTick==='function';function fallback(fn){setTimeout(fn,0);}function wrap(defer){return function(fn){for(var _len6=arguments.length,args=new Array(_len6>1?_len6-1:0),_key6=1;_key6<_len6;_key6++){args[_key6-1]=arguments[_key6];}return defer(()=>fn(...args));};}var _defer;if(hasQueueMicrotask){_defer=queueMicrotask;}else if(hasSetImmediate){_defer=setImmediate;}else if(hasNextTick){_defer=browser$1.nextTick;}else {_defer=fallback;}var setImmediate$1=wrap(_defer);/**\n * Take a sync function and make it async, passing its return value to a\n * callback. This is useful for plugging sync functions into a waterfall,\n * series, or other async functions. Any arguments passed to the generated\n * function will be passed to the wrapped function (except for the final\n * callback argument). Errors thrown will be passed to the callback.\n *\n * If the function passed to `asyncify` returns a Promise, that promises's\n * resolved/rejected state will be used to call the callback, rather than simply\n * the synchronous return value.\n *\n * This also means you can asyncify ES2017 `async` functions.\n *\n * @name asyncify\n * @static\n * @memberOf module:Utils\n * @method\n * @alias wrapSync\n * @category Util\n * @param {Function} func - The synchronous function, or Promise-returning\n * function to convert to an {@link AsyncFunction}.\n * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be\n * invoked with `(args..., callback)`.\n * @example\n *\n * // passing a regular synchronous function\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(JSON.parse),\n * function (data, next) {\n * // data is the result of parsing the text.\n * // If there was a parsing error, it would have been caught.\n * }\n * ], callback);\n *\n * // passing a function returning a promise\n * async.waterfall([\n * async.apply(fs.readFile, filename, \"utf8\"),\n * async.asyncify(function (contents) {\n * return db.model.create(contents);\n * }),\n * function (model, next) {\n * // `model` is the instantiated model object.\n * // If there was an error, this function would be skipped.\n * }\n * ], callback);\n *\n * // es2017 example, though `asyncify` is not needed if your JS environment\n * // supports async functions out of the box\n * var q = async.queue(async.asyncify(async function(file) {\n * var intermediateStep = await processFile(file);\n * return await somePromise(intermediateStep)\n * }));\n *\n * q.push(files);\n */function asyncify(func){if(isAsync(func)){return function(){for(var _len7=arguments.length,args=new Array(_len7),_key7=0;_key7<_len7;_key7++){args[_key7]=arguments[_key7];}var callback=args.pop();var promise=func.apply(this,args);return handlePromise(promise,callback);};}return initialParams(function(args,callback){var result;try{result=func.apply(this,args);}catch(e){return callback(e);}// if result is Promise object\nif(result&&typeof result.then==='function'){return handlePromise(result,callback);}else {callback(null,result);}});}function handlePromise(promise,callback){return promise.then(value=>{invokeCallback(callback,null,value);},err=>{invokeCallback(callback,err&&err.message?err:new Error(err));});}function invokeCallback(callback,error,value){try{callback(error,value);}catch(err){setImmediate$1(e=>{throw e;},err);}}function isAsync(fn){return fn[Symbol.toStringTag]==='AsyncFunction';}function isAsyncGenerator(fn){return fn[Symbol.toStringTag]==='AsyncGenerator';}function isAsyncIterable(obj){return typeof obj[Symbol.asyncIterator]==='function';}function wrapAsync(asyncFn){if(typeof asyncFn!=='function')throw new Error('expected a function');return isAsync(asyncFn)?asyncify(asyncFn):asyncFn;}// conditionally promisify a function.\n// only return a promise if a callback is omitted\nfunction awaitify(asyncFn){var arity=arguments.length>1&&arguments[1]!==undefined?arguments[1]:asyncFn.length;if(!arity)throw new Error('arity is undefined');function awaitable(){for(var _len8=arguments.length,args=new Array(_len8),_key8=0;_key8<_len8;_key8++){args[_key8]=arguments[_key8];}if(typeof args[arity-1]==='function'){return asyncFn.apply(this,args);}return new Promise((resolve,reject)=>{args[arity-1]=function(err){if(err)return reject(err);for(var _len9=arguments.length,cbArgs=new Array(_len9>1?_len9-1:0),_key9=1;_key9<_len9;_key9++){cbArgs[_key9-1]=arguments[_key9];}resolve(cbArgs.length>1?cbArgs:cbArgs[0]);};asyncFn.apply(this,args);});}return awaitable;}function _asyncMap(eachfn,arr,iteratee,callback){arr=arr||[];var results=[];var counter=0;var _iteratee=wrapAsync(iteratee);return eachfn(arr,(value,_,iterCb)=>{var index=counter++;_iteratee(value,(err,v)=>{results[index]=v;iterCb(err);});},err=>{callback(err,results);});}function isArrayLike(value){return value&&typeof value.length==='number'&&value.length>=0&&value.length%1===0;}// A temporary value used to identify if the loop should be broken.\n// See #1064, #1293\nvar breakLoop={};function once(fn){function wrapper(){if(fn===null)return;var callFn=fn;fn=null;for(var _len10=arguments.length,args=new Array(_len10),_key10=0;_key10<_len10;_key10++){args[_key10]=arguments[_key10];}callFn.apply(this,args);}Object.assign(wrapper,fn);return wrapper;}function getIterator(coll){return coll[Symbol.iterator]&&coll[Symbol.iterator]();}function createArrayIterator(coll){var i=-1;var len=coll.length;return function next(){return ++i=limit||awaiting||done)return;//console.log('replenish awaiting')\nawaiting=true;generator.next().then(_ref4=>{var{value,done:iterDone}=_ref4;//console.log('got value', value)\nif(canceled||done)return;awaiting=false;if(iterDone){done=true;if(running<=0){//console.log('done nextCb')\ncallback(null);}return;}running++;iteratee(value,idx,iterateeCallback);idx++;replenish();}).catch(handleError);}function iterateeCallback(err,result){//console.log('iterateeCallback')\nrunning-=1;if(canceled)return;if(err)return handleError(err);if(err===false){done=true;canceled=true;return;}if(result===breakLoop||done&&running<=0){done=true;//console.log('done iterCb')\nreturn callback(null);}replenish();}function handleError(err){if(canceled)return;awaiting=false;done=true;callback(err);}replenish();}var eachOfLimit=limit=>{return (obj,iteratee,callback)=>{callback=once(callback);if(limit<=0){throw new RangeError('concurrency limit cannot be less than 1');}if(!obj){return callback(null);}if(isAsyncGenerator(obj)){return asyncEachOfLimit(obj,limit,iteratee,callback);}if(isAsyncIterable(obj)){return asyncEachOfLimit(obj[Symbol.asyncIterator](),limit,iteratee,callback);}var nextElem=createIterator(obj);var done=false;var canceled=false;var running=0;var looping=false;function iterateeCallback(err,value){if(canceled)return;running-=1;if(err){done=true;callback(err);}else if(err===false){done=true;canceled=true;}else if(value===breakLoop||done&&running<=0){done=true;return callback(null);}else if(!looping){replenish();}}function replenish(){looping=true;while(running {\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }).catch( err => {\n * console.error(err);\n * });\n *\n * //Error handing\n * async.forEachOf(invalidConfigFileMap, parseFile)\n * .then( () => {\n * console.log(configs);\n * }).catch( err => {\n * console.error(err);\n * // JSON parse error exception\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.forEachOf(validConfigFileMap, parseFile);\n * console.log(configs);\n * // configs is now a map of JSON data, e.g.\n * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * //Error handing\n * async () => {\n * try {\n * let result = await async.forEachOf(invalidConfigFileMap, parseFile);\n * console.log(configs);\n * }\n * catch (err) {\n * console.log(err);\n * // JSON parse error exception\n * }\n * }\n *\n */function eachOf(coll,iteratee,callback){var eachOfImplementation=isArrayLike(coll)?eachOfArrayLike:eachOfGeneric;return eachOfImplementation(coll,wrapAsync(iteratee),callback);}var eachOf$1=awaitify(eachOf,3);/**\n * Produces a new collection of values by mapping each value in `coll` through\n * the `iteratee` function. The `iteratee` is called with an item from `coll`\n * and a callback for when it has finished processing. Each of these callbacks\n * takes 2 arguments: an `error`, and the transformed item from `coll`. If\n * `iteratee` passes an error to its callback, the main `callback` (for the\n * `map` function) is immediately called with the error.\n *\n * Note, that since this function applies the `iteratee` to each item in\n * parallel, there is no guarantee that the `iteratee` functions will complete\n * in order. However, the results array will be in the same order as the\n * original `coll`.\n *\n * If `map` is passed an Object, the results will be an Array. The results\n * will roughly be in the order of the original Objects' keys (but this can\n * vary across JavaScript engines).\n *\n * @name map\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an Array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // file1.txt is a file that is 1000 bytes in size\n * // file2.txt is a file that is 2000 bytes in size\n * // file3.txt is a file that is 3000 bytes in size\n * // file4.txt does not exist\n *\n * const fileList = ['file1.txt','file2.txt','file3.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.map(fileList, getFileSizeInBytes, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }\n * });\n *\n * // Error Handling\n * async.map(withMissingFileList, getFileSizeInBytes, function(err, results) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(results);\n * }\n * });\n *\n * // Using Promises\n * async.map(fileList, getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.map(withMissingFileList, getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.map(fileList, getFileSizeInBytes);\n * console.log(results);\n * // results is now an array of the file size in bytes for each file, e.g.\n * // [ 1000, 2000, 3000]\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let results = await async.map(withMissingFileList, getFileSizeInBytes);\n * console.log(results);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */function map(coll,iteratee,callback){return _asyncMap(eachOf$1,coll,iteratee,callback);}var map$1=awaitify(map,3);/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time.\n *\n * @name eachOfSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */function eachOfSeries(coll,iteratee,callback){return eachOfLimit$2(coll,1,iteratee,callback);}var eachOfSeries$1=awaitify(eachOfSeries,3);/**\n * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time.\n *\n * @name mapSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */function mapSeries(coll,iteratee,callback){return _asyncMap(eachOfSeries$1,coll,iteratee,callback);}awaitify(mapSeries,3);// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation\n// used for queues. This implementation assumes that the node provided by the user can be modified\n// to adjust the next and last properties. We implement only the minimal functionality\n// for queue support.\nclass DLL{constructor(){this.head=this.tail=null;this.length=0;}removeLink(node){if(node.prev)node.prev.next=node.next;else this.head=node.next;if(node.next)node.next.prev=node.prev;else this.tail=node.prev;node.prev=node.next=null;this.length-=1;return node;}empty(){while(this.head){this.shift();}return this;}insertAfter(node,newNode){newNode.prev=node;newNode.next=node.next;if(node.next)node.next.prev=newNode;else this.tail=newNode;node.next=newNode;this.length+=1;}insertBefore(node,newNode){newNode.prev=node.prev;newNode.next=node;if(node.prev)node.prev.next=newNode;else this.head=newNode;node.prev=newNode;this.length+=1;}unshift(node){if(this.head)this.insertBefore(this.head,node);else setInitial(this,node);}push(node){if(this.tail)this.insertAfter(this.tail,node);else setInitial(this,node);}shift(){return this.head&&this.removeLink(this.head);}pop(){return this.tail&&this.removeLink(this.tail);}toArray(){return [...this];}*[Symbol.iterator](){var cur=this.head;while(cur){yield cur.data;cur=cur.next;}}remove(testFn){var curr=this.head;while(curr){var{next}=curr;if(testFn(curr)){this.removeLink(curr);}curr=next;}return this;}}function setInitial(dll,node){dll.length=1;dll.head=dll.tail=node;}function queue(worker,concurrency,payload){if(concurrency==null){concurrency=1;}else if(concurrency===0){throw new RangeError('Concurrency must not be zero');}var _worker=wrapAsync(worker);var numRunning=0;var workersList=[];var events={error:[],drain:[],saturated:[],unsaturated:[],empty:[]};function on(event,handler){events[event].push(handler);}function once(event,handler){var handleAndRemove=function handleAndRemove(){off(event,handleAndRemove);handler(...arguments);};events[event].push(handleAndRemove);}function off(event,handler){if(!event)return Object.keys(events).forEach(ev=>events[ev]=[]);if(!handler)return events[event]=[];events[event]=events[event].filter(ev=>ev!==handler);}function trigger(event){for(var _len12=arguments.length,args=new Array(_len12>1?_len12-1:0),_key12=1;_key12<_len12;_key12++){args[_key12-1]=arguments[_key12];}events[event].forEach(handler=>handler(...args));}var processingScheduled=false;function _insert(data,insertAtFront,rejectOnError,callback){if(callback!=null&&typeof callback!=='function'){throw new Error('task callback must be a function');}q.started=true;var res,rej;function promiseCallback(err){// we don't care about the error, let the global error handler\n// deal with it\nif(err)return rejectOnError?rej(err):res();for(var _len13=arguments.length,args=new Array(_len13>1?_len13-1:0),_key13=1;_key13<_len13;_key13++){args[_key13-1]=arguments[_key13];}if(args.length<=1)return res(args[0]);res(args);}var item=q._createTaskItem(data,rejectOnError?promiseCallback:callback||promiseCallback);if(insertAtFront){q._tasks.unshift(item);}else {q._tasks.push(item);}if(!processingScheduled){processingScheduled=true;setImmediate$1(()=>{processingScheduled=false;q.process();});}if(rejectOnError||!callback){return new Promise((resolve,reject)=>{res=resolve;rej=reject;});}}function _createCB(tasks){return function(err){numRunning-=1;for(var _len14=arguments.length,args=new Array(_len14>1?_len14-1:0),_key14=1;_key14<_len14;_key14++){args[_key14-1]=arguments[_key14];}for(var i=0,l=tasks.length;i0){workersList.splice(index,1);}task.callback(err,...args);if(err!=null){trigger('error',err,task.data);}}if(numRunning<=q.concurrency-q.buffer){trigger('unsaturated');}if(q.idle()){trigger('drain');}q.process();};}function _maybeDrain(data){if(data.length===0&&q.idle()){// call drain immediately if there are no tasks\nsetImmediate$1(()=>trigger('drain'));return true;}return false;}var eventMethod=name=>handler=>{if(!handler){return new Promise((resolve,reject)=>{once(name,(err,data)=>{if(err)return reject(err);resolve(data);});});}off(name);on(name,handler);};var isProcessing=false;var q={_tasks:new DLL(),_createTaskItem(data,callback){return {data,callback};},*[Symbol.iterator](){yield*q._tasks[Symbol.iterator]();},concurrency,payload,buffer:concurrency/4,started:false,paused:false,push(data,callback){if(Array.isArray(data)){if(_maybeDrain(data))return;return data.map(datum=>_insert(datum,false,false,callback));}return _insert(data,false,false,callback);},pushAsync(data,callback){if(Array.isArray(data)){if(_maybeDrain(data))return;return data.map(datum=>_insert(datum,false,true,callback));}return _insert(data,false,true,callback);},kill(){off();q._tasks.empty();},unshift(data,callback){if(Array.isArray(data)){if(_maybeDrain(data))return;return data.map(datum=>_insert(datum,true,false,callback));}return _insert(data,true,false,callback);},unshiftAsync(data,callback){if(Array.isArray(data)){if(_maybeDrain(data))return;return data.map(datum=>_insert(datum,true,true,callback));}return _insert(data,true,true,callback);},remove(testFn){q._tasks.remove(testFn);},process(){// Avoid trying to start too many processing operations. This can occur\n// when callbacks resolve synchronously (#1267).\nif(isProcessing){return;}isProcessing=true;while(!q.paused&&numRunning {\n * console.log(result);\n * // 6000\n * // which is the sum of the file sizes of the three files\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.reduce(withMissingFileList, 0, getFileSizeInBytes)\n * .then( result => {\n * console.log(result);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.reduce(fileList, 0, getFileSizeInBytes);\n * console.log(result);\n * // 6000\n * // which is the sum of the file sizes of the three files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let result = await async.reduce(withMissingFileList, 0, getFileSizeInBytes);\n * console.log(result);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */function reduce(coll,memo,iteratee,callback){callback=once(callback);var _iteratee=wrapAsync(iteratee);return eachOfSeries$1(coll,(x,i,iterCb)=>{_iteratee(memo,x,(err,v)=>{memo=v;iterCb(err);});},err=>callback(err,memo));}awaitify(reduce,4);/**\n * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time.\n *\n * @name mapLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */function mapLimit(coll,limit,iteratee,callback){return _asyncMap(eachOfLimit(limit),coll,iteratee,callback);}var mapLimit$1=awaitify(mapLimit,4);/**\n * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time.\n *\n * @name concatLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @alias flatMapLimit\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,\n * which should use an array as its result. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n */function concatLimit(coll,limit,iteratee,callback){var _iteratee=wrapAsync(iteratee);return mapLimit$1(coll,limit,(val,iterCb)=>{_iteratee(val,function(err){if(err)return iterCb(err);for(var _len15=arguments.length,args=new Array(_len15>1?_len15-1:0),_key15=1;_key15<_len15;_key15++){args[_key15-1]=arguments[_key15];}return iterCb(err,args);});},(err,mapResults)=>{var result=[];for(var i=0;i {\n * console.log(results);\n * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.concat(withMissingDirectoryList, fs.readdir)\n * .then(results => {\n * console.log(results);\n * }).catch(err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4 does not exist\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.concat(directoryList, fs.readdir);\n * console.log(results);\n * // [ 'file1.txt', 'file2.txt', 'file3.txt', 'file4.txt', file5.txt ]\n * } catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * let results = await async.concat(withMissingDirectoryList, fs.readdir);\n * console.log(results);\n * } catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4 does not exist\n * }\n * }\n *\n */function concat(coll,iteratee,callback){return concatLimit$1(coll,Infinity,iteratee,callback);}awaitify(concat,3);/**\n * The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time.\n *\n * @name concatSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @alias flatMapSeries\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`.\n * The iteratee should complete with an array an array of results.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @returns A Promise, if no callback is passed\n */function concatSeries(coll,iteratee,callback){return concatLimit$1(coll,1,iteratee,callback);}awaitify(concatSeries,3);function _createTester(check,getResult){return (eachfn,arr,_iteratee,cb)=>{var testPassed=false;var testResult;var iteratee=wrapAsync(_iteratee);eachfn(arr,(value,_,callback)=>{iteratee(value,(err,result)=>{if(err||err===false)return callback(err);if(check(result)&&!testResult){testPassed=true;testResult=getResult(true,value);return callback(null,breakLoop);}callback();});},err=>{if(err)return cb(err);cb(null,testPassed?testResult:getResult(false));});};}/**\n * Returns the first value in `coll` that passes an async truth test. The\n * `iteratee` is applied in parallel, meaning the first iteratee to return\n * `true` will fire the detect `callback` with that result. That means the\n * result might not be the first item in the original `coll` (in terms of order)\n * that passes the test.\n\n * If order within the original `coll` is important, then look at\n * [`detectSeries`]{@link module:Collections.detectSeries}.\n *\n * @name detect\n * @static\n * @memberOf module:Collections\n * @method\n * @alias find\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the first file in the list that exists\n * }\n *);\n *\n * // Using Promises\n * async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists)\n * .then(result => {\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the first file in the list that exists\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.detect(['file3.txt','file2.txt','dir1/file1.txt'], fileExists);\n * console.log(result);\n * // dir1/file1.txt\n * // result now equals the file in the list that exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */function detect(coll,iteratee,callback){return _createTester(bool=>bool,(res,item)=>item)(eachOf$1,coll,iteratee,callback);}awaitify(detect,3);/**\n * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name detectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findLimit\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n */function detectLimit(coll,limit,iteratee,callback){return _createTester(bool=>bool,(res,item)=>item)(eachOfLimit(limit),coll,iteratee,callback);}awaitify(detectLimit,4);/**\n * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time.\n *\n * @name detectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findSeries\n * @category Collections\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n */function detectSeries(coll,iteratee,callback){return _createTester(bool=>bool,(res,item)=>item)(eachOfLimit(1),coll,iteratee,callback);}awaitify(detectSeries,3);/**\n * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in\n * the order of operations, the arguments `test` and `iteratee` are switched.\n *\n * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n *\n * @name doWhilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {AsyncFunction} iteratee - A function which is called each time `test`\n * passes. Invoked with (callback).\n * @param {AsyncFunction} test - asynchronous truth test to perform after each\n * execution of `iteratee`. Invoked with (...args, callback), where `...args` are the\n * non-error args from the previous callback of `iteratee`.\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped.\n * `callback` will be passed an error and any arguments passed to the final\n * `iteratee`'s callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n */function doWhilst(iteratee,test,callback){callback=onlyOnce(callback);var _fn=wrapAsync(iteratee);var _test=wrapAsync(test);var results;function next(err){if(err)return callback(err);if(err===false)return;for(var _len16=arguments.length,args=new Array(_len16>1?_len16-1:0),_key16=1;_key16<_len16;_key16++){args[_key16-1]=arguments[_key16];}results=args;_test(...args,check);}function check(err,truth){if(err)return callback(err);if(err===false)return;if(!truth)return callback(null,...results);_fn(next);}return check(null,true);}awaitify(doWhilst,3);function _withoutIndex(iteratee){return (value,index,callback)=>iteratee(value,callback);}/**\n * Applies the function `iteratee` to each item in `coll`, in parallel.\n * The `iteratee` is called with an item from the list, and a callback for when\n * it has finished. If the `iteratee` passes an error to its `callback`, the\n * main `callback` (for the `each` function) is immediately called with the\n * error.\n *\n * Note, that since this function applies `iteratee` to each item in parallel,\n * there is no guarantee that the iteratee functions will complete in order.\n *\n * @name each\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEach\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to\n * each item in `coll`. Invoked with (item, callback).\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOf`.\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const fileList = [ 'dir1/file2.txt', 'dir2/file3.txt', 'dir/file5.txt'];\n * const withMissingFileList = ['dir1/file1.txt', 'dir4/file2.txt'];\n *\n * // asynchronous function that deletes a file\n * const deleteFile = function(file, callback) {\n * fs.unlink(file, callback);\n * };\n *\n * // Using callbacks\n * async.each(fileList, deleteFile, function(err) {\n * if( err ) {\n * console.log(err);\n * } else {\n * console.log('All files have been deleted successfully');\n * }\n * });\n *\n * // Error Handling\n * async.each(withMissingFileList, deleteFile, function(err){\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * });\n *\n * // Using Promises\n * async.each(fileList, deleteFile)\n * .then( () => {\n * console.log('All files have been deleted successfully');\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error Handling\n * async.each(fileList, deleteFile)\n * .then( () => {\n * console.log('All files have been deleted successfully');\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * await async.each(files, deleteFile);\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * // Error Handling\n * async () => {\n * try {\n * await async.each(withMissingFileList, deleteFile);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * // since dir4/file2.txt does not exist\n * // dir1/file1.txt could have been deleted\n * }\n * }\n *\n */function eachLimit(coll,iteratee,callback){return eachOf$1(coll,_withoutIndex(wrapAsync(iteratee)),callback);}awaitify(eachLimit,3);/**\n * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time.\n *\n * @name eachLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfLimit`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */function eachLimit$1(coll,limit,iteratee,callback){return eachOfLimit(limit)(coll,_withoutIndex(wrapAsync(iteratee)),callback);}var eachLimit$2=awaitify(eachLimit$1,4);/**\n * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time.\n *\n * Note, that unlike [`each`]{@link module:Collections.each}, this function applies iteratee to each item\n * in series and therefore the iteratee functions will complete in order.\n\n * @name eachSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfSeries`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @returns {Promise} a promise, if a callback is omitted\n */function eachSeries(coll,iteratee,callback){return eachLimit$2(coll,1,iteratee,callback);}var eachSeries$1=awaitify(eachSeries,3);/**\n * Wrap an async function and ensure it calls its callback on a later tick of\n * the event loop. If the function already calls its callback on a next tick,\n * no extra deferral is added. This is useful for preventing stack overflows\n * (`RangeError: Maximum call stack size exceeded`) and generally keeping\n * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony)\n * contained. ES2017 `async` functions are returned as-is -- they are immune\n * to Zalgo's corrupting influences, as they always resolve on a later tick.\n *\n * @name ensureAsync\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - an async function, one that expects a node-style\n * callback as its last argument.\n * @returns {AsyncFunction} Returns a wrapped function with the exact same call\n * signature as the function passed in.\n * @example\n *\n * function sometimesAsync(arg, callback) {\n * if (cache[arg]) {\n * return callback(null, cache[arg]); // this would be synchronous!!\n * } else {\n * doSomeIO(arg, callback); // this IO would be asynchronous\n * }\n * }\n *\n * // this has a risk of stack overflows if many results are cached in a row\n * async.mapSeries(args, sometimesAsync, done);\n *\n * // this will defer sometimesAsync's callback if necessary,\n * // preventing stack overflows\n * async.mapSeries(args, async.ensureAsync(sometimesAsync), done);\n */function ensureAsync(fn){if(isAsync(fn))return fn;return function(){for(var _len17=arguments.length,args=new Array(_len17),_key17=0;_key17<_len17;_key17++){args[_key17]=arguments[_key17];}var callback=args.pop();var sync=true;args.push(function(){for(var _len18=arguments.length,innerArgs=new Array(_len18),_key18=0;_key18<_len18;_key18++){innerArgs[_key18]=arguments[_key18];}if(sync){setImmediate$1(()=>callback(...innerArgs));}else {callback(...innerArgs);}});fn.apply(this,args);sync=false;};}/**\n * Returns `true` if every element in `coll` satisfies an async test. If any\n * iteratee call returns `false`, the main `callback` is immediately called.\n *\n * @name every\n * @static\n * @memberOf module:Collections\n * @method\n * @alias all\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in parallel.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file5.txt'];\n * const withMissingFileList = ['file1.txt','file2.txt','file4.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.every(fileList, fileExists, function(err, result) {\n * console.log(result);\n * // true\n * // result is true since every file exists\n * });\n *\n * async.every(withMissingFileList, fileExists, function(err, result) {\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * });\n *\n * // Using Promises\n * async.every(fileList, fileExists)\n * .then( result => {\n * console.log(result);\n * // true\n * // result is true since every file exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * async.every(withMissingFileList, fileExists)\n * .then( result => {\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.every(fileList, fileExists);\n * console.log(result);\n * // true\n * // result is true since every file exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * async () => {\n * try {\n * let result = await async.every(withMissingFileList, fileExists);\n * console.log(result);\n * // false\n * // result is false since NOT every file exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */function every(coll,iteratee,callback){return _createTester(bool=>!bool,res=>!res)(eachOf$1,coll,iteratee,callback);}awaitify(every,3);/**\n * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time.\n *\n * @name everyLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in parallel.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */function everyLimit(coll,limit,iteratee,callback){return _createTester(bool=>!bool,res=>!res)(eachOfLimit(limit),coll,iteratee,callback);}awaitify(everyLimit,4);/**\n * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time.\n *\n * @name everySeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in series.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */function everySeries(coll,iteratee,callback){return _createTester(bool=>!bool,res=>!res)(eachOfSeries$1,coll,iteratee,callback);}awaitify(everySeries,3);function filterArray(eachfn,arr,iteratee,callback){var truthValues=new Array(arr.length);eachfn(arr,(x,index,iterCb)=>{iteratee(x,(err,v)=>{truthValues[index]=!!v;iterCb(err);});},err=>{if(err)return callback(err);var results=[];for(var i=0;i{iteratee(x,(err,v)=>{if(err)return iterCb(err);if(v){results.push({index,value:x});}iterCb(err);});},err=>{if(err)return callback(err);callback(null,results.sort((a,b)=>a.index-b.index).map(v=>v.value));});}function _filter(eachfn,coll,iteratee,callback){var filter=isArrayLike(coll)?filterArray:filterGeneric;return filter(eachfn,coll,wrapAsync(iteratee),callback);}/**\n * Returns a new array of all the values in `coll` which pass an async truth\n * test. This operation is performed in parallel, but the results array will be\n * in the same order as the original.\n *\n * @name filter\n * @static\n * @memberOf module:Collections\n * @method\n * @alias select\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * const files = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.filter(files, fileExists, function(err, results) {\n * if(err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }\n * });\n *\n * // Using Promises\n * async.filter(files, fileExists)\n * .then(results => {\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }).catch(err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.filter(files, fileExists);\n * console.log(results);\n * // [ 'dir1/file1.txt', 'dir2/file3.txt' ]\n * // results is now an array of the existing files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */function filter(coll,iteratee,callback){return _filter(eachOf$1,coll,iteratee,callback);}awaitify(filter,3);/**\n * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name filterLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback provided\n */function filterLimit(coll,limit,iteratee,callback){return _filter(eachOfLimit(limit),coll,iteratee,callback);}awaitify(filterLimit,4);/**\n * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time.\n *\n * @name filterSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectSeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results)\n * @returns {Promise} a promise, if no callback provided\n */function filterSeries(coll,iteratee,callback){return _filter(eachOfSeries$1,coll,iteratee,callback);}awaitify(filterSeries,3);/**\n * Calls the asynchronous function `fn` with a callback parameter that allows it\n * to call itself again, in series, indefinitely.\n\n * If an error is passed to the callback then `errback` is called with the\n * error, and execution stops, otherwise it will never be called.\n *\n * @name forever\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} fn - an async function to call repeatedly.\n * Invoked with (next).\n * @param {Function} [errback] - when `fn` passes an error to it's callback,\n * this function will be called, and execution stops. Invoked with (err).\n * @returns {Promise} a promise that rejects if an error occurs and an errback\n * is not passed\n * @example\n *\n * async.forever(\n * function(next) {\n * // next is suitable for passing to things that need a callback(err [, whatever]);\n * // it will result in this function being called again.\n * },\n * function(err) {\n * // if next is called with a value in its first parameter, it will appear\n * // in here as 'err', and execution will stop.\n * }\n * );\n */function forever(fn,errback){var done=onlyOnce(errback);var task=wrapAsync(ensureAsync(fn));function next(err){if(err)return done(err);if(err===false)return;task(next);}return next();}awaitify(forever,2);/**\n * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time.\n *\n * @name groupByLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.groupBy]{@link module:Collections.groupBy}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n * @returns {Promise} a promise, if no callback is passed\n */function groupByLimit(coll,limit,iteratee,callback){var _iteratee=wrapAsync(iteratee);return mapLimit$1(coll,limit,(val,iterCb)=>{_iteratee(val,(err,key)=>{if(err)return iterCb(err);return iterCb(err,{key,val});});},(err,mapResults)=>{var result={};// from MDN, handle object having an `hasOwnProperty` prop\nvar{hasOwnProperty}=Object.prototype;for(var i=0;i{_iteratee(val,key,(err,result)=>{if(err)return next(err);newObj[key]=result;next(err);});},err=>callback(err,newObj));}awaitify(mapValuesLimit,4);if(hasNextTick){browser$1.nextTick;}else if(hasSetImmediate){setImmediate;}else;awaitify((eachfn,tasks,callback)=>{var results=isArrayLike(tasks)?[]:{};eachfn(tasks,(task,key,taskCb)=>{wrapAsync(task)(function(err){for(var _len19=arguments.length,result=new Array(_len19>1?_len19-1:0),_key19=1;_key19<_len19;_key19++){result[_key19-1]=arguments[_key19];}if(result.length<2){[result]=result;}results[key]=result;taskCb(err);});},err=>callback(err,results));},3);/**\n * A queue of tasks for the worker function to complete.\n * @typedef {Iterable} QueueObject\n * @memberOf module:ControlFlow\n * @property {Function} length - a function returning the number of items\n * waiting to be processed. Invoke with `queue.length()`.\n * @property {boolean} started - a boolean indicating whether or not any\n * items have been pushed and processed by the queue.\n * @property {Function} running - a function returning the number of items\n * currently being processed. Invoke with `queue.running()`.\n * @property {Function} workersList - a function returning the array of items\n * currently being processed. Invoke with `queue.workersList()`.\n * @property {Function} idle - a function returning false if there are items\n * waiting or being processed, or true if not. Invoke with `queue.idle()`.\n * @property {number} concurrency - an integer for determining how many `worker`\n * functions should be run in parallel. This property can be changed after a\n * `queue` is created to alter the concurrency on-the-fly.\n * @property {number} payload - an integer that specifies how many items are\n * passed to the worker function at a time. only applies if this is a\n * [cargo]{@link module:ControlFlow.cargo} object\n * @property {AsyncFunction} push - add a new task to the `queue`. Calls `callback`\n * once the `worker` has finished processing the task. Instead of a single task,\n * a `tasks` array can be submitted. The respective callback is used for every\n * task in the list. Invoke with `queue.push(task, [callback])`,\n * @property {AsyncFunction} unshift - add a new task to the front of the `queue`.\n * Invoke with `queue.unshift(task, [callback])`.\n * @property {AsyncFunction} pushAsync - the same as `q.push`, except this returns\n * a promise that rejects if an error occurs.\n * @property {AsyncFunction} unshiftAsync - the same as `q.unshift`, except this returns\n * a promise that rejects if an error occurs.\n * @property {Function} remove - remove items from the queue that match a test\n * function. The test function will be passed an object with a `data` property,\n * and a `priority` property, if this is a\n * [priorityQueue]{@link module:ControlFlow.priorityQueue} object.\n * Invoked with `queue.remove(testFn)`, where `testFn` is of the form\n * `function ({data, priority}) {}` and returns a Boolean.\n * @property {Function} saturated - a function that sets a callback that is\n * called when the number of running workers hits the `concurrency` limit, and\n * further tasks will be queued. If the callback is omitted, `q.saturated()`\n * returns a promise for the next occurrence.\n * @property {Function} unsaturated - a function that sets a callback that is\n * called when the number of running workers is less than the `concurrency` &\n * `buffer` limits, and further tasks will not be queued. If the callback is\n * omitted, `q.unsaturated()` returns a promise for the next occurrence.\n * @property {number} buffer - A minimum threshold buffer in order to say that\n * the `queue` is `unsaturated`.\n * @property {Function} empty - a function that sets a callback that is called\n * when the last item from the `queue` is given to a `worker`. If the callback\n * is omitted, `q.empty()` returns a promise for the next occurrence.\n * @property {Function} drain - a function that sets a callback that is called\n * when the last item from the `queue` has returned from the `worker`. If the\n * callback is omitted, `q.drain()` returns a promise for the next occurrence.\n * @property {Function} error - a function that sets a callback that is called\n * when a task errors. Has the signature `function(error, task)`. If the\n * callback is omitted, `error()` returns a promise that rejects on the next\n * error.\n * @property {boolean} paused - a boolean for determining whether the queue is\n * in a paused state.\n * @property {Function} pause - a function that pauses the processing of tasks\n * until `resume()` is called. Invoke with `queue.pause()`.\n * @property {Function} resume - a function that resumes the processing of\n * queued tasks when the queue is paused. Invoke with `queue.resume()`.\n * @property {Function} kill - a function that removes the `drain` callback and\n * empties remaining tasks from the queue forcing it to go idle. No more tasks\n * should be pushed to the queue after calling this function. Invoke with `queue.kill()`.\n *\n * @example\n * const q = async.queue(worker, 2)\n * q.push(item1)\n * q.push(item2)\n * q.push(item3)\n * // queues are iterable, spread into an array to inspect\n * const items = [...q] // [item1, item2, item3]\n * // or use for of\n * for (let item of q) {\n * console.log(item)\n * }\n *\n * q.drain(() => {\n * console.log('all done')\n * })\n * // or\n * await q.drain()\n */ /**\n * Creates a `queue` object with the specified `concurrency`. Tasks added to the\n * `queue` are processed in parallel (up to the `concurrency` limit). If all\n * `worker`s are in progress, the task is queued until one becomes available.\n * Once a `worker` completes a `task`, that `task`'s callback is called.\n *\n * @name queue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} worker - An async function for processing a queued task.\n * If you want to handle errors from an individual task, pass a callback to\n * `q.push()`. Invoked with (task, callback).\n * @param {number} [concurrency=1] - An `integer` for determining how many\n * `worker` functions should be run in parallel. If omitted, the concurrency\n * defaults to `1`. If the concurrency is `0`, an error is thrown.\n * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can be\n * attached as certain properties to listen for specific events during the\n * lifecycle of the queue.\n * @example\n *\n * // create a queue object with concurrency 2\n * var q = async.queue(function(task, callback) {\n * console.log('hello ' + task.name);\n * callback();\n * }, 2);\n *\n * // assign a callback\n * q.drain(function() {\n * console.log('all items have been processed');\n * });\n * // or await the end\n * await q.drain()\n *\n * // assign an error callback\n * q.error(function(err, task) {\n * console.error('task experienced an error');\n * });\n *\n * // add some items to the queue\n * q.push({name: 'foo'}, function(err) {\n * console.log('finished processing foo');\n * });\n * // callback is optional\n * q.push({name: 'bar'});\n *\n * // add some items to the queue (batch-wise)\n * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) {\n * console.log('finished processing item');\n * });\n *\n * // add some items to the front of the queue\n * q.unshift({name: 'bar'}, function (err) {\n * console.log('finished processing bar');\n * });\n */function queue$1(worker,concurrency){var _worker=wrapAsync(worker);return queue((items,cb)=>{_worker(items[0],cb);},concurrency,1);}/**\n * Runs the `tasks` array of functions in parallel, without waiting until the\n * previous function has completed. Once any of the `tasks` complete or pass an\n * error to its callback, the main `callback` is immediately called. It's\n * equivalent to `Promise.race()`.\n *\n * @name race\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction}\n * to run. Each function can complete with an optional `result` value.\n * @param {Function} callback - A callback to run once any of the functions have\n * completed. This function gets an error or result from the first function that\n * completed. Invoked with (err, result).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.race([\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'one');\n * }, 200);\n * },\n * function(callback) {\n * setTimeout(function() {\n * callback(null, 'two');\n * }, 100);\n * }\n * ],\n * // main callback\n * function(err, result) {\n * // the result will be equal to 'two' as it finishes earlier\n * });\n */function race(tasks,callback){callback=once(callback);if(!Array.isArray(tasks))return callback(new TypeError('First argument to race must be an array of functions'));if(!tasks.length)return callback();for(var i=0,l=tasks.length;i{iteratee(value,(err,v)=>{cb(err,!v);});},callback);}/**\n * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test.\n *\n * @name reject\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n *\n * const fileList = ['dir1/file1.txt','dir2/file3.txt','dir3/file6.txt'];\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.reject(fileList, fileExists, function(err, results) {\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * });\n *\n * // Using Promises\n * async.reject(fileList, fileExists)\n * .then( results => {\n * console.log(results);\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let results = await async.reject(fileList, fileExists);\n * console.log(results);\n * // [ 'dir3/file6.txt' ]\n * // results now equals an array of the non-existing files\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */function reject$1(coll,iteratee,callback){return reject(eachOf$1,coll,iteratee,callback);}awaitify(reject$1,3);/**\n * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name rejectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */function rejectLimit(coll,limit,iteratee,callback){return reject(eachOfLimit(limit),coll,iteratee,callback);}awaitify(rejectLimit,4);/**\n * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time.\n *\n * @name rejectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback is passed\n */function rejectSeries(coll,iteratee,callback){return reject(eachOfSeries$1,coll,iteratee,callback);}awaitify(rejectSeries,3);/**\n * Returns `true` if at least one element in the `coll` satisfies an async test.\n * If any iteratee call returns `true`, the main `callback` is immediately\n * called.\n *\n * @name some\n * @static\n * @memberOf module:Collections\n * @method\n * @alias any\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in parallel.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n * @example\n *\n * // dir1 is a directory that contains file1.txt, file2.txt\n * // dir2 is a directory that contains file3.txt, file4.txt\n * // dir3 is a directory that contains file5.txt\n * // dir4 does not exist\n *\n * // asynchronous function that checks if a file exists\n * function fileExists(file, callback) {\n * fs.access(file, fs.constants.F_OK, (err) => {\n * callback(null, !err);\n * });\n * }\n *\n * // Using callbacks\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }\n *);\n *\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists,\n * function(err, result) {\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }\n *);\n *\n * // Using Promises\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists)\n * .then( result => {\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists)\n * .then( result => {\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Using async/await\n * async () => {\n * try {\n * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir3/file5.txt'], fileExists);\n * console.log(result);\n * // true\n * // result is true since some file in the list exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n * async () => {\n * try {\n * let result = await async.some(['dir1/missing.txt','dir2/missing.txt','dir4/missing.txt'], fileExists);\n * console.log(result);\n * // false\n * // result is false since none of the files exists\n * }\n * catch (err) {\n * console.log(err);\n * }\n * }\n *\n */function some(coll,iteratee,callback){return _createTester(Boolean,res=>res)(eachOf$1,coll,iteratee,callback);}awaitify(some,3);/**\n * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time.\n *\n * @name someLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anyLimit\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in parallel.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */function someLimit(coll,limit,iteratee,callback){return _createTester(Boolean,res=>res)(eachOfLimit(limit),coll,iteratee,callback);}awaitify(someLimit,4);/**\n * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time.\n *\n * @name someSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anySeries\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in series.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @returns {Promise} a promise, if no callback provided\n */function someSeries(coll,iteratee,callback){return _createTester(Boolean,res=>res)(eachOfSeries$1,coll,iteratee,callback);}awaitify(someSeries,3);/**\n * Sorts a list by the results of running each `coll` value through an async\n * `iteratee`.\n *\n * @name sortBy\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a value to use as the sort criteria as\n * its `result`.\n * Invoked with (item, callback).\n * @param {Function} callback - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is the items\n * from the original `coll` sorted by the values returned by the `iteratee`\n * calls. Invoked with (err, results).\n * @returns {Promise} a promise, if no callback passed\n * @example\n *\n * // bigfile.txt is a file that is 251100 bytes in size\n * // mediumfile.txt is a file that is 11000 bytes in size\n * // smallfile.txt is a file that is 121 bytes in size\n *\n * // asynchronous function that returns the file size in bytes\n * function getFileSizeInBytes(file, callback) {\n * fs.stat(file, function(err, stat) {\n * if (err) {\n * return callback(err);\n * }\n * callback(null, stat.size);\n * });\n * }\n *\n * // Using callbacks\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes,\n * function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * }\n * );\n *\n * // By modifying the callback parameter the\n * // sorting order can be influenced:\n *\n * // ascending order\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], function(file, callback) {\n * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {\n * if (getFileSizeErr) return callback(getFileSizeErr);\n * callback(null, fileSize);\n * });\n * }, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * }\n * );\n *\n * // descending order\n * async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], function(file, callback) {\n * getFileSizeInBytes(file, function(getFileSizeErr, fileSize) {\n * if (getFileSizeErr) {\n * return callback(getFileSizeErr);\n * }\n * callback(null, fileSize * -1);\n * });\n * }, function(err, results) {\n * if (err) {\n * console.log(err);\n * } else {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'bigfile.txt', 'mediumfile.txt', 'smallfile.txt']\n * }\n * }\n * );\n *\n * // Error handling\n * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes,\n * function(err, results) {\n * if (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * } else {\n * console.log(results);\n * }\n * }\n * );\n *\n * // Using Promises\n * async.sortBy(['mediumfile.txt','smallfile.txt','bigfile.txt'], getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }).catch( err => {\n * console.log(err);\n * });\n *\n * // Error handling\n * async.sortBy(['mediumfile.txt','smallfile.txt','missingfile.txt'], getFileSizeInBytes)\n * .then( results => {\n * console.log(results);\n * }).catch( err => {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * });\n *\n * // Using async/await\n * (async () => {\n * try {\n * let results = await async.sortBy(['bigfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);\n * console.log(results);\n * // results is now the original array of files sorted by\n * // file size (ascending by default), e.g.\n * // [ 'smallfile.txt', 'mediumfile.txt', 'bigfile.txt']\n * }\n * catch (err) {\n * console.log(err);\n * }\n * })();\n *\n * // Error handling\n * async () => {\n * try {\n * let results = await async.sortBy(['missingfile.txt','mediumfile.txt','smallfile.txt'], getFileSizeInBytes);\n * console.log(results);\n * }\n * catch (err) {\n * console.log(err);\n * // [ Error: ENOENT: no such file or directory ]\n * }\n * }\n *\n */function sortBy(coll,iteratee,callback){var _iteratee=wrapAsync(iteratee);return map$1(coll,(x,iterCb)=>{_iteratee(x,(err,criteria)=>{if(err)return iterCb(err);iterCb(err,{value:x,criteria});});},(err,results)=>{if(err)return callback(err);callback(null,results.sort(comparator).map(v=>v.value));});function comparator(left,right){var a=left.criteria,b=right.criteria;return ab?1:0;}}awaitify(sortBy,3);/**\n * It runs each task in series but stops whenever any of the functions were\n * successful. If one of the tasks were successful, the `callback` will be\n * passed the result of the successful task. If all tasks fail, the callback\n * will be passed the error and result (if any) of the final attempt.\n *\n * @name tryEach\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing functions to\n * run, each function is passed a `callback(err, result)` it must call on\n * completion with an error `err` (which can be `null`) and an optional `result`\n * value.\n * @param {Function} [callback] - An optional callback which is called when one\n * of the tasks has succeeded, or all have failed. It receives the `err` and\n * `result` arguments of the last attempt at completing the `task`. Invoked with\n * (err, results).\n * @returns {Promise} a promise, if no callback is passed\n * @example\n * async.tryEach([\n * function getDataFromFirstWebsite(callback) {\n * // Try getting the data from the first website\n * callback(err, data);\n * },\n * function getDataFromSecondWebsite(callback) {\n * // First website failed,\n * // Try getting the data from the backup website\n * callback(err, data);\n * }\n * ],\n * // optional callback\n * function(err, results) {\n * Now do something with the data.\n * });\n *\n */function tryEach(tasks,callback){var error=null;var result;return eachSeries$1(tasks,(task,taskCb)=>{wrapAsync(task)(function(err){if(err===false)return taskCb(err);for(var _len20=arguments.length,args=new Array(_len20>1?_len20-1:0),_key20=1;_key20<_len20;_key20++){args[_key20-1]=arguments[_key20];}if(args.length<2){[result]=args;}else {result=args;}error=err;taskCb(err?null:{});});},()=>callback(error,result));}awaitify(tryEach);/**\n * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when\n * stopped, or an error occurs.\n *\n * @name whilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} test - asynchronous truth test to perform before each\n * execution of `iteratee`. Invoked with ().\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` passes. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns {Promise} a promise, if no callback is passed\n * @example\n *\n * var count = 0;\n * async.whilst(\n * function test(cb) { cb(null, count < 5); },\n * function iter(callback) {\n * count++;\n * setTimeout(function() {\n * callback(null, count);\n * }, 1000);\n * },\n * function (err, n) {\n * // 5 seconds have passed, n = 5\n * }\n * );\n */function whilst(test,iteratee,callback){callback=onlyOnce(callback);var _fn=wrapAsync(iteratee);var _test=wrapAsync(test);var results=[];function next(err){if(err)return callback(err);for(var _len21=arguments.length,rest=new Array(_len21>1?_len21-1:0),_key21=1;_key21<_len21;_key21++){rest[_key21-1]=arguments[_key21];}results=rest;if(err===false)return;_test(check);}function check(err,truth){if(err)return callback(err);if(err===false)return;if(!truth)return callback(null,...results);_fn(next);}return _test(check);}awaitify(whilst,3);/**\n * Runs the `tasks` array of functions in series, each passing their results to\n * the next in the array. However, if any of the `tasks` pass an error to their\n * own callback, the next function is not executed, and the main `callback` is\n * immediately called with the error.\n *\n * @name waterfall\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}\n * to run.\n * Each function should complete with any number of `result` values.\n * The `result` values will be passed as arguments, in order, to the next task.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This will be passed the results of the last task's\n * callback. Invoked with (err, [results]).\n * @returns {Promise} a promise, if a callback is omitted\n * @example\n *\n * async.waterfall([\n * function(callback) {\n * callback(null, 'one', 'two');\n * },\n * function(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * },\n * function(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n *\n * // Or, with named functions:\n * async.waterfall([\n * myFirstFunction,\n * mySecondFunction,\n * myLastFunction,\n * ], function (err, result) {\n * // result now equals 'done'\n * });\n * function myFirstFunction(callback) {\n * callback(null, 'one', 'two');\n * }\n * function mySecondFunction(arg1, arg2, callback) {\n * // arg1 now equals 'one' and arg2 now equals 'two'\n * callback(null, 'three');\n * }\n * function myLastFunction(arg1, callback) {\n * // arg1 now equals 'three'\n * callback(null, 'done');\n * }\n */function waterfall(tasks,callback){callback=once(callback);if(!Array.isArray(tasks))return callback(new Error('First argument to waterfall must be an array of functions'));if(!tasks.length)return callback();var taskIndex=0;function nextTask(args){var task=wrapAsync(tasks[taskIndex++]);task(...args,onlyOnce(next));}function next(err){if(err===false)return;for(var _len22=arguments.length,args=new Array(_len22>1?_len22-1:0),_key22=1;_key22<_len22;_key22++){args[_key22-1]=arguments[_key22];}if(err||taskIndex===tasks.length){return callback(err,...args);}nextTask(args);}nextTask([]);}awaitify(waterfall);function processTasks(task,finishedCallback){return __awaiter$1(this,void 0,void 0,function*(){try{yield task();finishedCallback();}catch(e){finishedCallback(e);}});}class AsyncQueue{constructor(){this.queue=queue$1(processTasks,1);}push(task){return this.queue.pushAsync(task);}empty(){return this.queue.empty();}}var NOISE_REDUCTION_KIND='noise-reduction-effect';var VIRTUAL_BACKGROUND_KIND='virtual-background-effect';var isNoiseReductionEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===NOISE_REDUCTION_KIND;};var isVirtualBackgroundEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===VIRTUAL_BACKGROUND_KIND;};var OfferAnswerType;(function(OfferAnswerType){OfferAnswerType[OfferAnswerType[\"LocalOnly\"]=0]=\"LocalOnly\";OfferAnswerType[OfferAnswerType[\"Remote\"]=1]=\"Remote\";})(OfferAnswerType||(OfferAnswerType={}));class SendOnlyTransceiver extends Transceiver{constructor(config){super(config);this.rtxEnabled=false;this.streamMuteStateChange=new TypedEvent();this.streamPublishStateChange=new TypedEvent();this.negotiationNeeded=new TypedEvent();this.namedMediaGroupsChange=new TypedEvent();this.requestedIdEncodingParamsMap=new Map();this.updateSendParametersQueue=new AsyncQueue();this.sourceStateOverrideChange=new TypedEvent();this.metadata={lastRequestedUpdateTimestampsMap:new Map()};this.munger=config.munger;this.csi=config.csi;this.direction='sendrecv';this.handleTrackChange=this.handleTrackChange.bind(this);this.handleStreamConstraintsChange=this.handleStreamConstraintsChange.bind(this);this.handleStreamMuteStateChange=this.handleStreamMuteStateChange.bind(this);}replaceSenderSource(stream){var _a,_b;return __awaiter$1(this,void 0,void 0,function*(){var trackOrNull=(_a=stream===null||stream===void 0?void 0:stream.outputStream.getTracks()[0])!==null&&_a!==void 0?_a:null;if(((_b=this.sender.track)===null||_b===void 0?void 0:_b.id)!==(trackOrNull===null||trackOrNull===void 0?void 0:trackOrNull.id)){yield this.sender.replaceTrack(trackOrNull);if(trackOrNull){logger.log(\"Sender source for \".concat(this.mediaType,\" replaced with track ID \").concat(trackOrNull.id));}else {logger.log(\"Sender source for \".concat(this.mediaType,\" set to null, sender stopped\"));}}});}handleTrackChange(){return __awaiter$1(this,void 0,void 0,function*(){if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}handleStreamConstraintsChange(){return __awaiter$1(this,void 0,void 0,function*(){yield this.updateSendParameters(this.requestedIdEncodingParamsMap);});}handleStreamMuteStateChange(){this.streamMuteStateChange.emit();}get requested(){return this.requestedIdEncodingParamsMap.size>0;}replaceTransceiver(newRtcRtpTransceiver){var _super=Object.create(null,{replaceTransceiver:{get:()=>super.replaceTransceiver}});return __awaiter$1(this,void 0,void 0,function*(){_super.replaceTransceiver.call(this,newRtcRtpTransceiver);newRtcRtpTransceiver.direction=this.direction;if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}replacePublishedStream(newStream){return __awaiter$1(this,void 0,void 0,function*(){var oldStream=this.publishedStream;oldStream===null||oldStream===void 0?void 0:oldStream.off(LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(LocalStreamEventNames.SystemMuteStateChange,this.handleStreamMuteStateChange);if(this.requested){yield this.replaceSenderSource(newStream);}this.publishedStream=newStream;newStream===null||newStream===void 0?void 0:newStream.on(LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);newStream===null||newStream===void 0?void 0:newStream.on(LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);newStream===null||newStream===void 0?void 0:newStream.on(LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);newStream===null||newStream===void 0?void 0:newStream.on(LocalStreamEventNames.SystemMuteStateChange,this.handleStreamMuteStateChange);if(!oldStream&&newStream&&!newStream.muted||oldStream&&!newStream&&!oldStream.muted){this.streamPublishStateChange.emit();}else if((oldStream===null||oldStream===void 0?void 0:oldStream.muted)!==(newStream===null||newStream===void 0?void 0:newStream.muted)){this.streamMuteStateChange.emit();}});}setNamedMediaGroups(namedMediaGroups){if(this.mediaType!==MediaType.AudioMain){logErrorAndThrow(WcmeErrorType.SET_NMG_FAILED,\"Named media groups can only be set for audio.\");}this.namedMediaGroups=namedMediaGroups;this.namedMediaGroupsChange.emit();}publishStream(stream){return this.replacePublishedStream(stream);}unpublishStream(){return this.replacePublishedStream();}get active(){return this._rtcRtpTransceiver.direction==='sendrecv';}set active(enabled){this.direction=enabled?'sendrecv':'inactive';this._rtcRtpTransceiver.direction=this.direction;if(this._rtcRtpTransceiver.direction!==this._rtcRtpTransceiver.currentDirection){this.negotiationNeeded.emit(OfferAnswerType.Remote);}}getStats(){return __awaiter$1(this,void 0,void 0,function*(){var statsMap=new Map();var statsReport=yield this.sender.getStats();statsReport.forEach((stats,key)=>{var _a,_b,_c,_d;if(stats.type==='outbound-rtp'){stats.mid=this.mid;stats.csi=this.csi;stats.calliopeMediaType=this.mediaType;var senderId=this.munger.getSenderIds().find(id=>id.ssrc===stats.ssrc);if(senderId){var encodingIndex=this.getEncodingIndexForStreamId(senderId);var encodingParams=this.requestedIdEncodingParamsMap.get(encodingIndex);stats.requestedBitrate=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxPayloadBitsPerSecond;stats.requestedFrameSize=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxFs;stats.isRequested=!!encodingParams;stats.lastRequestedUpdateTimestamp=this.metadata.lastRequestedUpdateTimestampsMap.get(encodingIndex);}var effect=(_b=(_a=this.publishedStream)===null||_a===void 0?void 0:_a.getEffects())===null||_b===void 0?void 0:_b[0];if(effect===null||effect===void 0?void 0:effect.isEnabled){if(isNoiseReductionEffect(effect)){stats.effect={kind:effect.kind,noiseReductionMode:'LOW_POWER'};}else if(isVirtualBackgroundEffect(effect)){stats.effect={kind:effect.kind,virtualBackgroundMode:(_c=effect.options)===null||_c===void 0?void 0:_c.mode};}else {stats.effect={kind:effect.kind};}}var trackSettings=(_d=this.publishedStream)===null||_d===void 0?void 0:_d.getSettings();if(trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate){stats.targetFrameRate=trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate;}}else if(stats.type==='media-source'){stats.calliopeMediaType=this.mediaType;}statsMap.set(key,stats);});return statsMap;});}updateSendParameters(requestedIdEncodingParamsMap){return __awaiter$1(this,void 0,void 0,function*(){return this.updateSendParametersQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var sendParameters=this.sender.getParameters();sendParameters.encodings.forEach((encoding,index)=>{var _a,_b;var encodingParams=requestedIdEncodingParamsMap.get(index);encoding.active=!!encodingParams;if(encodingParams){var{maxPayloadBitsPerSecond,maxFs,maxWidth,maxHeight}=encodingParams;var scaleDownRatio=getScaleDownRatio((_a=this.publishedStream)===null||_a===void 0?void 0:_a.getSettings().width,(_b=this.publishedStream)===null||_b===void 0?void 0:_b.getSettings().height,maxFs,maxWidth,maxHeight);if(maxPayloadBitsPerSecond!==undefined&&maxPayloadBitsPerSecond>=0){encoding.maxBitrate=maxPayloadBitsPerSecond;}if(scaleDownRatio!==undefined&&scaleDownRatio>=1.0){encoding.scaleResolutionDownBy=scaleDownRatio;}}});yield this.sender.setParameters(sendParameters);logger.log(\"Sender parameters for \".concat(this.mediaType,\" set to \").concat(JSON.stringify(sendParameters)));var timestamp=getCurrentTimestamp();requestedIdEncodingParamsMap.forEach((_,index)=>{if(!this.requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});this.requestedIdEncodingParamsMap.forEach((_,index)=>{if(!requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});var oldRequested=this.requested;var newRequested=requestedIdEncodingParamsMap.size>0;this.requestedIdEncodingParamsMap=requestedIdEncodingParamsMap;if(oldRequested!==newRequested){yield this.replaceSenderSource(newRequested?this.publishedStream:null);}}));});}isSimulcastEnabled(){var params=this.sender.getParameters();return params.encodings.length>1;}mungeLocalDescription(mediaDescription){this.munger.mungeLocalDescription(mediaDescription,{simulcastEnabled:this.isSimulcastEnabled(),rtxEnabled:this.rtxEnabled,twccDisabled:this.twccDisabled,forceSoftwareEncoder:this.mediaType===MediaType.VideoSlides&&(BrowserInfo.isWindows()||BrowserInfo.isMac())&&(BrowserInfo.isChrome()||BrowserInfo.isEdge())});}mungeLocalDescriptionForRemoteServer(mediaDescription){var mungeOptions=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{injectDummyCandidates:true};this.munger.mungeLocalDescriptionForRemoteServer(mediaDescription,getMediaContent(this.mediaType),this.csi,mungeOptions);}mungeRemoteDescription(mediaDescription){this.munger.mungeRemoteDescription(mediaDescription);}get senderIds(){return this.munger.getSenderIds();}get numActiveSimulcastLayers(){var _a;if(getMediaFamily(this.mediaType)===MediaFamily.Video){return (_a=this.publishedStream)===null||_a===void 0?void 0:_a.getNumActiveSimulcastLayers();}return this.publishedStream?0:undefined;}getEncodingIndexForStreamId(id){return this.munger.getEncodingIndexForStreamId(id);}resetSdpMunger(){this.munger.reset();}setCodecParameters(parameters){this.munger.setCodecParameters(parameters);this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);}deleteCodecParameters(parameters){this.munger.deleteCodecParameters(parameters);this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);}setSourceStateOverride(state){this.sourceStateOverride=state;this.sourceStateOverrideChange.emit();}get currentSourceState(){if(this.sourceStateOverride){return this.sourceStateOverride;}if(!this.publishedStream){return 'no source';}if(this.publishedStream.muted){return 'avatar';}return 'live';}}class SendSlot{constructor(sendTransceiver){this.sendTransceiver=sendTransceiver;}publishStream(stream){return __awaiter$1(this,void 0,void 0,function*(){if(stream===this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.publishStream(stream);});}unpublishStream(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.unpublishStream();});}setNamedMediaGroups(namedMediaGroups){this.sendTransceiver.setNamedMediaGroups(namedMediaGroups);}clearNamedMediaGroups(){this.setNamedMediaGroups([]);}get active(){return this.sendTransceiver.active;}set active(active){this.sendTransceiver.active=active;}setCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.setCodecParameters(parameters);});}deleteCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.deleteCodecParameters(parameters);});}setSourceStateOverride(state){this.sendTransceiver.setSourceStateOverride(state);}clearSourceStateOverride(){this.sendTransceiver.setSourceStateOverride(undefined);}}var organizeTransceiverStats=(sendTransceivers,recvTransceivers)=>__awaiter$1(void 0,void 0,void 0,function*(){var result={audio:{senders:[],receivers:[]},video:{senders:[],receivers:[]},screenShareAudio:{senders:[],receivers:[]},screenShareVideo:{senders:[],receivers:[]}};yield Promise.all([...sendTransceivers.entries()].map(_ref5=>{var[mediaType,transceiver]=_ref5;return __awaiter$1(void 0,void 0,void 0,function*(){var _a;var item={report:yield transceiver.getStats(),mid:transceiver.mid,csi:transceiver.csi,currentDirection:'sendonly',localTrackLabel:(_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.label};if(mediaType===MediaType.AudioMain){result.audio.senders.push(item);}if(mediaType===MediaType.VideoMain){result.video.senders.push(item);}if(mediaType===MediaType.AudioSlides){result.screenShareAudio.senders.push(item);}if(mediaType===MediaType.VideoSlides){result.screenShareVideo.senders.push(item);}});}));yield Promise.all([...recvTransceivers.entries()].map(_ref6=>{var[mediaType,transceivers]=_ref6;return __awaiter$1(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter$1(void 0,void 0,void 0,function*(){var _b;var item={report:yield t.getStats(),csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_b=t.receiveSlot.stream.getTracks()[0])===null||_b===void 0?void 0:_b.label};if(mediaType===MediaType.AudioMain){result.audio.receivers.push(item);}if(mediaType===MediaType.VideoMain){result.video.receivers.push(item);}if(mediaType===MediaType.AudioSlides){result.screenShareAudio.receivers.push(item);}if(mediaType===MediaType.VideoSlides){result.screenShareVideo.receivers.push(item);}})));});}));return result;});function toMediaStreamTrackKind(mediaType){return [MediaType.VideoMain,MediaType.VideoSlides].includes(mediaType)?MediaStreamTrackKind.Video:MediaStreamTrackKind.Audio;}function webRtcVideoContentHintToJmpVideoContentHint(hint){if(hint==='motion'){return 'motion';}if(hint==='detail'){return 'sharpness';}return undefined;}var MultistreamConnectionEventNames;(function(MultistreamConnectionEventNames){MultistreamConnectionEventNames[\"VideoSourceCountUpdate\"]=\"video-source-count-update\";MultistreamConnectionEventNames[\"AudioSourceCountUpdate\"]=\"audio-source-count-update\";MultistreamConnectionEventNames[\"ActiveSpeakerNotification\"]=\"active-speaker-notification\";MultistreamConnectionEventNames[\"PeerConnectionStateUpdate\"]=\"peer-connection-state-update\";MultistreamConnectionEventNames[\"IceConnectionStateUpdate\"]=\"ice-connection-state-update\";MultistreamConnectionEventNames[\"IceGatheringStateUpdate\"]=\"ice-gathering-state-update\";MultistreamConnectionEventNames[\"NegotiationNeeded\"]=\"negotiation-needed\";MultistreamConnectionEventNames[\"CreateOfferOnSuccess\"]=\"createofferonsuccess\";MultistreamConnectionEventNames[\"CreateAnswerOnSuccess\"]=\"createansweronsuccess\";MultistreamConnectionEventNames[\"SetLocalDescriptionOnSuccess\"]=\"setlocaldescriptiononsuccess\";MultistreamConnectionEventNames[\"SetRemoteDescriptionOnSuccess\"]=\"setremotedescriptiononsuccess\";MultistreamConnectionEventNames[\"IceCandidate\"]=\"icecandidate\";MultistreamConnectionEventNames[\"IceCandidateError\"]=\"icecandidateerror\";})(MultistreamConnectionEventNames||(MultistreamConnectionEventNames={}));var defaultMultistreamConnectionOptions={disableSimulcast:BrowserInfo.isFirefox(),bundlePolicy:'max-compat',iceServers:undefined,iceTransportPolicy:'all',disableContentSimulcast:true,disableAudioTwcc:true,doFullIce:BrowserInfo.isFirefox(),metricsCallback:()=>{}};class MultistreamConnection extends EventEmitter$2{constructor(){var userOptions=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};super();this.sendTransceivers=new Map();this.recvTransceivers=new Map();this.jmpSessions=new Map();this.pendingJmpTasks=[];this.overuseUpdateCallback=()=>{};this.midPredictor=new MidPredictor();this.offerAnswerQueue=new AsyncQueue();this.currentCreateOfferId=0;this.options=Object.assign(Object.assign({},defaultMultistreamConnectionOptions),userOptions);logger.info(\"Creating multistream connection with options \".concat(JSON.stringify(this.options)));this.metricsCallback=this.options.metricsCallback;this.initializePeerConnection();this.overuseStateManager=new OveruseStateManager(overuseState=>this.overuseUpdateCallback(overuseState));this.overuseStateManager.start();this.statsManager=new StatsManager(()=>this.pc.getStats(),stats=>this.preProcessStats(stats));var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();var videoMainEncodingOptions=this.getVideoEncodingOptions(MediaContent.Main);var videoSlidesEncodingOptions=this.getVideoEncodingOptions(MediaContent.Slides);this.createSendTransceiver(MediaType.VideoMain,mainSceneId,videoMainEncodingOptions);this.createSendTransceiver(MediaType.AudioMain,mainSceneId);this.createSendTransceiver(MediaType.VideoSlides,slidesSceneId,videoSlidesEncodingOptions);this.createSendTransceiver(MediaType.AudioSlides,slidesSceneId);}initializePeerConnection(){var _a;(_a=this.pc)===null||_a===void 0?void 0:_a.close();this.pc=new PeerConnection({iceServers:this.options.iceServers,bundlePolicy:this.options.bundlePolicy,iceTransportPolicy:this.options.iceTransportPolicy});this.propagatePeerConnectionEvents();this.attachMetricsObserver();this.createDataChannel();}propagatePeerConnectionEvents(){this.pc.on(PeerConnection.Events.PeerConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.PeerConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.IceConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.IceConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.CreateOfferOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateOfferOnSuccess,description);});this.pc.on(PeerConnection.Events.CreateAnswerOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateAnswerOnSuccess,description);});this.pc.on(PeerConnection.Events.SetLocalDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetLocalDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.SetRemoteDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetRemoteDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.IceGatheringStateChange,()=>{this.emit(MultistreamConnectionEventNames.IceGatheringStateUpdate,this.getIceGatheringState());});this.pc.on(PeerConnection.Events.IceCandidate,candidate=>{this.emit(MultistreamConnectionEventNames.IceCandidate,candidate);});this.pc.on(PeerConnection.Events.IceCandidateError,error=>{this.emit(MultistreamConnectionEventNames.IceCandidateError,error);});}getConnectionState(){return this.pc.getConnectionState();}getPeerConnectionState(){return this.pc.getPeerConnectionState();}getIceConnectionState(){return this.pc.getIceConnectionState();}getCurrentConnectionType(){return this.pc.getCurrentConnectionType();}getIceGatheringState(){return this.pc.iceGatheringState;}getVideoEncodingOptions(content){var enabledSimulcast=content===MediaContent.Main?!this.options.disableSimulcast:!this.options.disableContentSimulcast;return enabledSimulcast?[{scaleResolutionDownBy:4,active:false},{scaleResolutionDownBy:2,active:false},{active:false}]:[{active:false}];}createSendTransceiver(mediaType,sceneId,sendEncodingsOptions){var rtcRtpTransceiver;try{rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:sendEncodingsOptions});}catch(e){logger.error(\"addTransceiver failed due to : \".concat(e));throw e;}var mid=this.midPredictor.getNextMid(mediaType);var csi=generateCsi(getMediaFamily(mediaType),sceneId);var munger=new EgressSdpMunger();var transceiver=new SendOnlyTransceiver({rtcRtpTransceiver,mid,mediaType,munger,csi});if(getMediaFamily(mediaType)===MediaFamily.Video){transceiver.rtxEnabled=true;transceiver.setCodecParameters({'max-mbps':\"\".concat(defaultMaxVideoEncodeMbps),'max-fs':\"\".concat(defaultMaxVideoEncodeFrameSize)});}transceiver.twccDisabled=getMediaFamily(mediaType)===MediaFamily.Audio?this.options.disableAudioTwcc:false;transceiver.active=false;transceiver.streamMuteStateChange.on(()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);});transceiver.streamPublishStateChange.on(()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);});transceiver.negotiationNeeded.on(offerAnswerType=>{if(offerAnswerType===OfferAnswerType.Remote){this.emit(MultistreamConnectionEventNames.NegotiationNeeded);}else if(this.pc.getRemoteDescription()){this.queueLocalOfferAnswer();}});transceiver.namedMediaGroupsChange.on(()=>{this.sendSourceAdvertisement(mediaType);});transceiver.sourceStateOverrideChange.on(()=>{this.sendMediaRequestStatus(mediaType);});this.sendTransceivers.set(mediaType,transceiver);this.createJmpSession(mediaType);}createSendSlot(mediaType){var active=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var transceiver=this.getSendTransceiverOrThrow(mediaType);transceiver.active=active;return new SendSlot(transceiver);}createJmpSession(mediaType){var jmpSession=new JmpSession(getMediaFamily(mediaType),getMediaContent(mediaType));jmpSession.setTxCallback(msg=>{var _a;if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)!=='open'){logger.error(\"DataChannel not created or not connected. Unable to send JMP message.\");return;}try{logger.info(\"Sending JMP message (size: \".concat(msg.length,\"): \").concat(msg));this.dataChannel.send(msg);}catch(err){var{bufferedAmount,readyState}=this.dataChannel;var{sctp}=this.pc.getUnderlyingRTCPeerConnection();var{maxMessageSize,state}=sctp||{};logErrorAndThrow(WcmeErrorType.DATA_CHANNEL_SEND_FAILED,\"Sending JMP message failed with error: \".concat(err,\",\\nMessage size: \").concat(msg.length,\",\\nData Channel State: \").concat(readyState,\",\\nData Channel Buffered amount: \").concat(bufferedAmount,\",\\nSCTP State: \").concat(state,\",\\nSCTP Max Message Size: \").concat(maxMessageSize));}});var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents.SourceAdvertisementReceived,data=>{logger.log(\"SourceAdvertisement received: \".concat(JSON.stringify(data)));if(data.numTotalSources!==prevNumTotalSources||data.numLiveSources!==prevNumLiveSources){prevNumTotalSources=data.numTotalSources;prevNumLiveSources=data.numLiveSources;var eventName=getMediaFamily(mediaType)===MediaFamily.Video?MultistreamConnectionEventNames.VideoSourceCountUpdate:MultistreamConnectionEventNames.AudioSourceCountUpdate;this.emit(eventName,data.numTotalSources,data.numLiveSources,getMediaContent(mediaType));}else {logger.log('Number of sources was unchanged, ignoring message');}});jmpSession.on(JmpSessionEvents.MediaRequestStatusReceived,data=>{logger.log(\"MediaRequestStatus received: \".concat(JSON.stringify(data)));data.streamStates.forEach(s=>{if(!isValidSsrcStreamId(s.id)){logger.error(\"Received MediaRequestStatus with non-SSRC based stream ID, which is currently not supported: \".concat(JSON.stringify(s.id)));return;}var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger.warn(\"Got MediaRequestStatus for unknown receive slot: \".concat(JSON.stringify(s.id)));return;}receiveSlot._updateSource(s.state,s.csi);});});jmpSession.on(JmpSessionEvents.MediaRequestReceived,data=>{logger.log(\"MediaRequest received: \".concat(JSON.stringify(data)));this.updateRequestedStreams(mediaType,data.requests).then(()=>{if(getMediaFamily(mediaType)===MediaFamily.Video){this.sendMediaRequestStatus(mediaType);}});});jmpSession.on(JmpSessionEvents.ActiveSpeaker,data=>{this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data.csis);this.recvTransceivers.forEach(transceivers=>{transceivers.forEach(t=>{var{currentRxCsi}=t.receiveSlot;if(currentRxCsi!==undefined){var isActiveSpeaker=data.csis.some(activeCsi=>(activeCsi&0xfffffffe)===(currentRxCsi&0xfffffffe));t.handleActiveSpeakerUpdate(isActiveSpeaker);}});});});this.jmpSessions.set(mediaType,jmpSession);}updateRequestedStreams(mediaType,requests){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var mediaFamily=getMediaFamily(mediaType);var requestedIdEncodingParamsMap=new Map();var rsRequests=requests.filter(r=>isValidReceiverSelectedInfo(r.policySpecificInfo));if(rsRequests.length!==requests.length){logger.warn('Ignoring non-receiver-selected requests');}rsRequests.forEach(_ref7=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref7;var _a,_b,_c;if(ids.length>1){logErrorAndThrow(WcmeErrorType.INVALID_STREAM_REQUEST,\"Stream request cannot have more than one ID.\");}if(ids.length===0){return;}if(sendTransceiver.csi!==policySpecificInfo.csi){logger.warn('csi in the StreamRequest does not match');return;}var id=ids[0];var codecInfo=codecInfos[0];if(!isValidSsrcStreamId(id)){logger.warn(\"\".concat(mediaType,\": The stream ID is not a valid SsrcStreamId: \").concat(JSON.stringify(id)));return;}var streamIdsMatched=sendTransceiver.senderIds.some(validId=>areStreamIdsEqual(id,validId));if(streamIdsMatched){var encodingIndex=sendTransceiver.getEncodingIndexForStreamId(id);if(encodingIndex!==-1){var encodingParams={maxPayloadBitsPerSecond};if(mediaFamily===MediaFamily.Video){encodingParams.maxFs=(_a=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_a===void 0?void 0:_a.maxFs;encodingParams.maxWidth=(_b=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_b===void 0?void 0:_b.maxWidth;encodingParams.maxHeight=(_c=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_c===void 0?void 0:_c.maxHeight;}requestedIdEncodingParamsMap.set(encodingIndex,encodingParams);}else {logger.warn(\"\".concat(mediaType,\": Unable to get encoding index for stream ID: \").concat(JSON.stringify(id)));}}else {logger.warn(\"\".concat(mediaType,\": Unable to find matching stream ID for requested ID: \").concat(JSON.stringify(id)));}});return sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);}createDataChannel(){var dataChannel=this.pc.createDataChannel('datachannel',{ordered:false,maxRetransmits:0});dataChannel.onopen=event=>{logger.info('DataChannel opened:',JSON.stringify(event));[...this.sendTransceivers.keys()].forEach(mediaType=>{this.sendSourceAdvertisement(mediaType);});logger.info(\"Flushing pending JMP task queue\");this.pendingJmpTasks.forEach(t=>t());this.pendingJmpTasks=[];};dataChannel.onmessage=e=>{var parsed;try{parsed=JSON.parse(e.data);}catch(err){logger.error(\"Error parsing datachannel JSON: \".concat(err));return;}logger.debug('DataChannel got msg:',e.data);var homerMsg=HomerMsg.fromJson(parsed);if(!homerMsg){logger.error(\"Received invalid datachannel message: \".concat(e));return;}var jmpMsg=homerMsg.payload;if(!isValidJmpMsg(jmpMsg)){logger.error(\"Received invalid JMP msg: \".concat(JSON.stringify(jmpMsg)));return;}var mediaType=getMediaType(jmpMsg.mediaFamily,jmpMsg.mediaContent);var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger.error(\"Unable to find JMP session for media type \".concat(mediaType,\".\"));return;}jmpSession.receive(jmpMsg);};dataChannel.onclose=event=>{logger.info('DataChannel closed:',JSON.stringify(event));};dataChannel.onerror=event=>{logger.info('DataChannel error:',JSON.stringify(event));};this.dataChannel=dataChannel;}close(){this.sendTransceivers.forEach(t=>t.close());this.recvTransceivers.forEach(recvTransceivers=>{recvTransceivers.forEach(t=>t.close());});this.jmpSessions.forEach(jmpSession=>jmpSession.close());this.pc.close();}sendMediaRequestStatus(mediaType){var _a;if(getMediaFamily(mediaType)!==MediaFamily.Video){return;}if(!this.getSendTransceiverOrThrow(mediaType).requested){return;}var streamStates=this.getVideoStreamStates(mediaType);var task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendMediaRequestStatus(streamStates);};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}sendSourceAdvertisement(mediaType){var _a,_b;var transceiver=this.getSendTransceiverOrThrow(mediaType);var numLiveSources=((_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.muted)===false?1:0;var task;if(getMediaFamily(mediaType)===MediaFamily.Video){var sources=this.getVideoStreamStates(mediaType);if(sources===null){return;}var contentHint;if(transceiver.publishedStream&&mediaType===MediaType.VideoSlides){contentHint=transceiver.publishedStream.contentHint;}task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,[],webRtcVideoContentHintToJmpVideoContentHint(contentHint));};}else {task=()=>{var _a;return (_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,mediaType===MediaType.AudioMain?transceiver.namedMediaGroups:[]);};}if(((_b=this.dataChannel)===null||_b===void 0?void 0:_b.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}getVideoStreamStates(mediaType){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);return sendTransceiver.senderIds.map(id=>({id,state:sendTransceiver.currentSourceState,csi:sendTransceiver.csi}));}createReceiveTransceiver(mediaType){var rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'});var mid=this.midPredictor.getNextMid(mediaType);var munger=new IngressSdpMunger();var recvOnlyTransceiver=new ReceiveOnlyTransceiver({rtcRtpTransceiver,mid,mediaType,munger});recvOnlyTransceiver.twccDisabled=getMediaFamily(mediaType)===MediaFamily.Audio?this.options.disableAudioTwcc:false;this.recvTransceivers.set(mediaType,[...(this.recvTransceivers.get(mediaType)||[]),recvOnlyTransceiver]);return recvOnlyTransceiver;}createReceiveSlot(mediaType){return __awaiter$1(this,void 0,void 0,function*(){return (yield this.createReceiveSlots(mediaType,1))[0];});}createReceiveSlots(mediaType){var count=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;return __awaiter$1(this,void 0,void 0,function*(){return new Promise(createReceiveSlotsResolve=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var createdReceiveOnlyTransceivers=[];for(var i=0;itransceiver.receiveSlot);createReceiveSlotsResolve(receiveSlots);}));});});}getIngressPayloadType(mediaType,mimeType){var _a,_b,_c;var requestedMediaCodecType=mimeType.split('/')[1];var requestedMid=(_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.mid;var parsedOffer=parse$1((_b=this.pc.getLocalDescription())===null||_b===void 0?void 0:_b.sdp);var parsedAnswer=parse$1((_c=this.pc.getRemoteDescription())===null||_c===void 0?void 0:_c.sdp);var senderCodecs=parsedAnswer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);var receiverCodecs=parsedOffer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);if(!senderCodecs||!receiverCodecs||senderCodecs.length===0||receiverCodecs.length===0){logErrorAndThrow(WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,\"Sender codecs or receiver codecs is undefined or empty.\");}var senderCodec=senderCodecs[0];var targetCodec=receiverCodecs.find(receiverCodec=>{return areCodecsCompatible(senderCodec,receiverCodec);});if(!targetCodec||!targetCodec.pt){logErrorAndThrow(WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,\"Cannot find matching receiver codec for the given mediaType/mimeType.\");}return targetCodec.pt;}waitForIceGatheringComplete(){return __awaiter$1(this,void 0,void 0,function*(){return new Promise(resolve=>{if(this.pc.iceGatheringState==='complete'){resolve();}else {this.pc.on(PeerConnection.Events.IceGatheringStateChange,()=>{if(this.pc.iceGatheringState==='complete'){resolve();}});}});});}createOffer(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.pc.getLocalDescription()){this.midPredictor.allocateMidForDatachannel();}if(this.setAnswerResolve){logger.info('Canceling previous offer since setAnswer was never called for it');this.setAnswerResolve();this.setAnswerResolve=undefined;}var createOfferId=++this.currentCreateOfferId;return new Promise((createOfferResolve,createOfferReject)=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var _a;try{var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(WcmeErrorType.CREATE_OFFER_FAILED,\"Error: \".concat(error,\". SDP: \").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});if(this.options.doFullIce){yield this.waitForIceGatheringComplete();}var sdpToSend=this.prepareLocalOfferForRemoteServer((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);createOfferResolve({type:'offer',sdp:sdpToSend});if(this.currentCreateOfferId>createOfferId){logger.log('Canceling previous offer since createOffer was called while it was being created');}else {yield new Promise(setAnswerResolve=>{this.setAnswerResolve=setAnswerResolve;});}}catch(error){createOfferReject(error);}}));});});}setAnswer(answer){return __awaiter$1(this,void 0,void 0,function*(){var sdp=this.preProcessRemoteAnswer(answer);if(!this.setAnswerResolve){logErrorAndThrow(WcmeErrorType.SET_ANSWER_FAILED,\"Call to setAnswer without having previously called createOffer.\");}logger.info('calling this.pc.setRemoteDescription()');return this.pc.setRemoteDescription({type:'answer',sdp}).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');if(this.setAnswerResolve){this.setAnswerResolve();this.setAnswerResolve=undefined;}else {logger.debug(\"setAnswerResolve function was cleared between setAnswer and result of setRemoteDescription\");}})).catch(error=>{logErrorAndThrow(WcmeErrorType.SET_ANSWER_FAILED,\"Error: \".concat(error,\". SDP: \").concat(maskIp(answer)));});});}doLocalOfferAnswer(){var _a;return __awaiter$1(this,void 0,void 0,function*(){var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(WcmeErrorType.CREATE_OFFER_FAILED,\"Error: \".concat(error,\". SDP: \").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});var answer=this.preProcessRemoteAnswer((_a=this.pc.getRemoteDescription())===null||_a===void 0?void 0:_a.sdp);return this.pc.setRemoteDescription({type:'answer',sdp:answer}).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');})).catch(error=>{logErrorAndThrow(WcmeErrorType.CREATE_OFFER_FAILED,\"Error: \".concat(error,\". SDP: \").concat(maskIp(answer)));});});}queueLocalOfferAnswer(){return __awaiter$1(this,void 0,void 0,function*(){return this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){yield this.doLocalOfferAnswer();}));});}preProcessLocalOffer(offer){var parsedOffer=parse$1(offer);parsedOffer.avMedia.filter(av=>av.direction==='recvonly').forEach(av=>{var recvTransceiver=this.getRecvTransceiverByMidOrThrow(av.mid);recvTransceiver.mungeLocalDescription(av);});parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescription(av);});if(BrowserInfo.isFirefox()){setupBundle(parsedOffer,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsedOffer.toString();}prepareLocalOfferForRemoteServer(offer){var parsedOffer=parse$1(offer);var shouldInjectDummyCandidates=()=>{if(!this.options.doFullIce){return true;}return !hasIceCandidates(parsedOffer);};var mungeOptions={injectDummyCandidates:shouldInjectDummyCandidates()};parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescriptionForRemoteServer(av,mungeOptions);});if(mungeOptions.injectDummyCandidates){parsedOffer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{injectDummyCandidates(media);});}if(BrowserInfo.isFirefox()&&this.options.doFullIce){var{candidates}=parsedOffer.media[0].iceInfo;parsedOffer.media.forEach(media=>{media.iceInfo.candidates=candidates;});}if(BrowserInfo.isFirefox()){setupBundle(parsedOffer,this.options.bundlePolicy,this.midPredictor.getMidMap());if(this.options.bundlePolicy==='max-bundle'){parsedOffer.media.forEach((media,index)=>{if(index>0){media.port=parsedOffer.media[0].port;}});}}filterRecvOnlyMediaDescriptions(parsedOffer);return parsedOffer.toString();}preProcessRemoteAnswer(answer){var _a;var parsedAnswer=parse$1(answer);var parsedOffer=parse$1((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer);parsedAnswer.avMedia.filter(av=>av.direction==='sendonly').forEach(av=>{var recvTransceiver=this.getRecvTransceiverByMidOrThrow(av.mid);recvTransceiver.mungeRemoteDescription(av);});parsedAnswer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='recvonly').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeRemoteDescription(av);});parsedAnswer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{if(retainCandidatesByTransportType(media,['udp','tcp'])){logger.log(\"Some unsupported remote candidates have been removed from mid \".concat(media.mid));}});if(BrowserInfo.isFirefox()){setupBundle(parsedAnswer,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsedAnswer.toString();}getSendTransceiverOrThrow(mediaType){var sendTransceiver=this.sendTransceivers.get(mediaType);if(!sendTransceiver){logErrorAndThrow(WcmeErrorType.GET_TRANSCEIVER_FAILED,\"Unable to find send transceiver for media type \".concat(mediaType,\".\"));}return sendTransceiver;}getSendTransceiverByMidOrThrow(mid){var transceiver=[...this.sendTransceivers.values()].find(t=>t.mid===mid);if(!transceiver){logErrorAndThrow(WcmeErrorType.GET_TRANSCEIVER_FAILED,\"Unable to find send transceiver with MID \".concat(mid,\".\"));}return transceiver;}getRecvTransceiverByMidOrThrow(mid){var transceiver=[...this.recvTransceivers.values()].flat().find(t=>t.mid===mid);if(!transceiver){logErrorAndThrow(WcmeErrorType.GET_TRANSCEIVER_FAILED,\"Unable to find recv transceiver with MID \".concat(mid,\".\"));}return transceiver;}requestMedia(mediaType,streamRequests){var _a;var task=()=>{var _a;var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger.error(\"Unable to find jmp session for \".concat(mediaType));return;}var requestedReceiveSlotIds=[];streamRequests.forEach(request=>{if(request.receiveSlots.length===0){logger.error('Stream request ids cannot be empty.');return;}request.receiveSlots.forEach(slot=>{if(!slot.id){logger.error('Running stream request task, but ReceiveSlot ID is missing.');}if(!requestedReceiveSlotIds.some(id=>areStreamIdsEqual(id,slot.id))){requestedReceiveSlotIds.push(slot.id);}else {logger.error(\"Stream id duplicate found \".concat(JSON.stringify(slot.id),\".\"));}});});jmpSession.sendRequests(streamRequests.map(sr=>sr._toJmpStreamRequest()));(_a=this.recvTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.forEach(transceiver=>{if(requestedReceiveSlotIds.some(id=>areStreamIdsEqual(id,transceiver.receiveSlot.id))){var relevantRequest=streamRequests.find(request=>request.receiveSlots.some(slot=>areStreamIdsEqual(slot.id,transceiver.receiveSlot.id)));transceiver.handleRequested(relevantRequest);}else {transceiver.handleUnrequested();}});};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}renewPeerConnection(userOptions){if(userOptions){this.options=Object.assign(Object.assign({},this.options),userOptions);}logger.info(\"Renewing multistream connection with options \".concat(JSON.stringify(this.options)));this.midPredictor.reset();this.initializePeerConnection();var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();this.sendTransceivers.forEach((transceiver,mediaType)=>{var _a;var mediaContent=getMediaContent(mediaType);var sceneId=mediaContent===MediaContent.Main?mainSceneId:slidesSceneId;var mid=this.midPredictor.getNextMid(mediaType);transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:getMediaFamily(mediaType)===MediaFamily.Video?this.getVideoEncodingOptions(mediaContent):undefined}));transceiver.mid=mid;transceiver.csi=generateCsi(getMediaFamily(mediaType),sceneId);transceiver.resetSdpMunger();(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.close();this.createJmpSession(mediaType);});this.recvTransceivers.forEach((transceivers,mediaType)=>{transceivers.forEach(t=>{var mid=this.midPredictor.getNextMid(mediaType);t.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'}));t.mid=mid;});});}getReceiveSlotById(id){return [...this.recvTransceivers.values()].flat().map(transceiver=>transceiver.receiveSlot).find(receiveSlot=>{var receiveSlotId=receiveSlot.id||{};return Object.keys(receiveSlotId).length===Object.keys(id).length&&Object.keys(receiveSlotId).every(key=>Object.prototype.hasOwnProperty.call(id,key)&&receiveSlotId[key]===id[key]);});}getStats(){return this.statsManager.getStats();}getTransceiverStats(){return __awaiter$1(this,void 0,void 0,function*(){return organizeTransceiverStats(this.sendTransceivers,this.recvTransceivers);});}preProcessStats(stats){return __awaiter$1(this,void 0,void 0,function*(){yield Promise.all([...this.sendTransceivers.values()].map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{if(senderStats.type==='outbound-rtp'||senderStats.type==='media-source'){stats.set(senderStats.id,senderStats);}});})));yield Promise.all([...this.recvTransceivers.values()].map(transceivers=>__awaiter$1(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{if(receiverStats.type==='inbound-rtp'){stats.set(receiverStats.id,receiverStats);}});})));})));});}attachMetricsObserver(){this.forceStatsReport=rtcStats_1(this.pc.getUnderlyingRTCPeerConnection(),data=>this.metricsCallback(data),5000,stats=>this.preProcessStats(stats)).forceStatsReport;}forceRtcMetricsCallback(){var _a;return (_a=this.forceStatsReport)===null||_a===void 0?void 0:_a.call(this);}setOveruseUpdateCallback(callback){this.overuseUpdateCallback=callback;}getCsiByMediaType(mediaType){var _a;return (_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.csi;}getAllCsis(){return {audioMain:this.getCsiByMediaType(MediaType.AudioMain),audioSlides:this.getCsiByMediaType(MediaType.AudioSlides),videoMain:this.getCsiByMediaType(MediaType.VideoMain),videoSlides:this.getCsiByMediaType(MediaType.VideoSlides)};}}class StreamRequest{constructor(policy,policySpecificInfo,receiveSlots,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.receiveSlots=receiveSlots;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}_toJmpStreamRequest(){return new StreamRequest$1(this.policy,this.policySpecificInfo,this.receiveSlots.map(rs=>rs.id),this.maxPayloadBitsPerSecond,this.codecInfos);}}\n\nvar defaultLogger = {\n info: function info() {\n return console.info(...arguments);\n },\n log: function log() {\n return console.log(...arguments);\n },\n error: function error() {\n return console.error(...arguments);\n },\n warn: function warn() {\n return console.warn(...arguments);\n },\n trace: function trace() {\n return console.trace(...arguments);\n },\n debug: function debug() {\n return console.debug(...arguments);\n }\n};\nvar currentLogger = defaultLogger;\nvar getLogger = () => currentLogger;\nvar configureWcmeLogger = debugId => {\n var logger = getLogger();\n setLogHandler((messages, context) => {\n var logMessages = Array.from(messages).map(message => typeof message === 'object' ? JSON.stringify(message) : message);\n logMessages.unshift(\"\".concat(debugId || '', \":[\").concat(context.name, \"]\"));\n switch (context.level.name) {\n case 'TRACE':\n logger.trace(...logMessages);\n break;\n case 'DEBUG':\n logger.debug(...logMessages);\n break;\n case 'INFO':\n logger.info(...logMessages);\n break;\n case 'WARN':\n logger.warn(...logMessages);\n break;\n case 'ERROR':\n logger.error(...logMessages);\n break;\n }\n });\n};\nvar setLogger = newLogger => {\n if (newLogger) {\n currentLogger = newLogger;\n } else {\n currentLogger = defaultLogger;\n }\n configureWcmeLogger();\n};\nvar getErrorDescription = error => {\n return error ? error.stack ? \"\".concat(error.message, \": \").concat(error.stack) : \"\".concat(error) : '';\n};\n\nvar NUM = '\\\\d+';\nvar SDP_TOKEN = \"[!#$%&'*+\\\\-.^_`{|}~a-zA-Z0-9]+\";\nvar ANY_NON_WS = '\\\\S+';\nvar SP = '\\\\s';\nvar REST = '.+';\nclass Line {}\nvar _a$5;\nclass BandwidthLine extends Line {\n constructor(bandwidthType, bandwidth) {\n super();\n this.bandwidthType = bandwidthType;\n this.bandwidth = bandwidth;\n }\n static fromSdpLine(line) {\n if (!BandwidthLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(BandwidthLine.regex);\n var bandwidthType = tokens[1];\n var bandwidth = parseInt(tokens[2], 10);\n return new BandwidthLine(bandwidthType, bandwidth);\n }\n toSdpLine() {\n return \"b=\".concat(this.bandwidthType, \":\").concat(this.bandwidth);\n }\n}\n_a$5 = BandwidthLine;\nBandwidthLine.BW_TYPE_REGEX = 'CT|AS|TIAS';\nBandwidthLine.regex = new RegExp(\"^(\".concat(_a$5.BW_TYPE_REGEX, \"):(\").concat(NUM, \")\"));\nclass BundleGroupLine extends Line {\n constructor(mids) {\n super();\n this.mids = mids;\n }\n static fromSdpLine(line) {\n if (!BundleGroupLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(BundleGroupLine.regex);\n var mids = tokens[1].split(' ');\n return new BundleGroupLine(mids);\n }\n toSdpLine() {\n return \"a=group:BUNDLE \".concat(this.mids.join(' '));\n }\n}\nBundleGroupLine.regex = new RegExp(\"^group:BUNDLE (\".concat(REST, \")\"));\nvar _a$4;\nclass CandidateLine extends Line {\n constructor(foundation, componentId, transport, priority, connectionAddress, port, candidateType, relAddr, relPort, candidateExtensions) {\n super();\n this.foundation = foundation;\n this.componentId = componentId;\n this.transport = transport;\n this.priority = priority;\n this.connectionAddress = connectionAddress;\n this.port = port;\n this.candidateType = candidateType;\n this.relAddr = relAddr;\n this.relPort = relPort;\n this.candidateExtensions = candidateExtensions;\n }\n static fromSdpLine(line) {\n if (!CandidateLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(CandidateLine.regex);\n var foundation = tokens[1];\n var componentId = parseInt(tokens[2], 10);\n var transport = tokens[3];\n var priority = parseInt(tokens[4], 10);\n var connectionAddress = tokens[5];\n var port = parseInt(tokens[6], 10);\n var candidateType = tokens[7];\n var relAddr = tokens[8];\n var relPort = tokens[9] ? parseInt(tokens[9], 10) : undefined;\n var candidateExtensions = tokens[10];\n return new CandidateLine(foundation, componentId, transport, priority, connectionAddress, port, candidateType, relAddr, relPort, candidateExtensions);\n }\n toSdpLine() {\n var str = '';\n str += \"a=candidate:\".concat(this.foundation, \" \").concat(this.componentId, \" \").concat(this.transport, \" \").concat(this.priority, \" \").concat(this.connectionAddress, \" \").concat(this.port, \" typ \").concat(this.candidateType);\n if (this.relAddr) {\n str += \" raddr \".concat(this.relAddr);\n }\n if (this.relPort) {\n str += \" rport \".concat(this.relPort);\n }\n if (this.candidateExtensions) {\n str += \" \".concat(this.candidateExtensions);\n }\n return str;\n }\n}\n_a$4 = CandidateLine;\nCandidateLine.ICE_CHARS = \"[a-zA-Z0-9+/]+\";\nCandidateLine.regex = new RegExp(\"^candidate:(\".concat(_a$4.ICE_CHARS, \") (\").concat(NUM, \") (\").concat(ANY_NON_WS, \") (\").concat(NUM, \") (\").concat(ANY_NON_WS, \") (\").concat(NUM, \") typ (\").concat(ANY_NON_WS, \")(?: raddr (\").concat(ANY_NON_WS, \"))?(?: rport (\").concat(NUM, \"))?(?: (\").concat(REST, \"))?\"));\nclass ConnectionLine extends Line {\n constructor(netType, addrType, ipAddr) {\n super();\n this.netType = netType;\n this.addrType = addrType;\n this.ipAddr = ipAddr;\n }\n static fromSdpLine(line) {\n if (!ConnectionLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(ConnectionLine.regex);\n var netType = tokens[1];\n var addrType = tokens[2];\n var ipAddr = tokens[3];\n return new ConnectionLine(netType, addrType, ipAddr);\n }\n toSdpLine() {\n return \"c=\".concat(this.netType, \" \").concat(this.addrType, \" \").concat(this.ipAddr);\n }\n}\nConnectionLine.regex = new RegExp(\"^(\".concat(ANY_NON_WS, \") (\").concat(ANY_NON_WS, \") (\").concat(ANY_NON_WS, \")\"));\nclass ContentLine extends Line {\n constructor(values) {\n super();\n this.values = values;\n }\n static fromSdpLine(line) {\n if (!ContentLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(ContentLine.regex);\n var values = tokens[1].split(',');\n return new ContentLine(values);\n }\n toSdpLine() {\n return \"a=content:\".concat(this.values.join(','));\n }\n}\nContentLine.regex = new RegExp(\"^content:(\".concat(REST, \")$\"));\nclass DirectionLine extends Line {\n constructor(direction) {\n super();\n this.direction = direction;\n }\n static fromSdpLine(line) {\n if (!DirectionLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(DirectionLine.regex);\n var direction = tokens[1];\n return new DirectionLine(direction);\n }\n toSdpLine() {\n return \"a=\".concat(this.direction);\n }\n}\nDirectionLine.regex = /^(sendrecv|sendonly|recvonly|inactive)$/;\nvar _a$3;\nclass ExtMapLine extends Line {\n constructor(id, uri, direction, extensionAttributes) {\n super();\n this.id = id;\n this.uri = uri;\n this.direction = direction;\n this.extensionAttributes = extensionAttributes;\n }\n static fromSdpLine(line) {\n if (!ExtMapLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(ExtMapLine.regex);\n var id = parseInt(tokens[1], 10);\n var direction = tokens[2];\n var uri = tokens[3];\n var extensionAttributes = tokens[4];\n return new ExtMapLine(id, uri, direction, extensionAttributes);\n }\n toSdpLine() {\n var str = '';\n str += \"a=extmap:\".concat(this.id);\n if (this.direction) {\n str += \"/\".concat(this.direction);\n }\n str += \" \".concat(this.uri);\n if (this.extensionAttributes) {\n str += \" \".concat(this.extensionAttributes);\n }\n return str;\n }\n}\n_a$3 = ExtMapLine;\nExtMapLine.EXTMAP_DIRECTION = \"sendonly|recvonly|sendrecv|inactive\";\nExtMapLine.regex = new RegExp(\"^extmap:(\".concat(NUM, \")(?:/(\").concat(_a$3.EXTMAP_DIRECTION, \"))? (\").concat(ANY_NON_WS, \")(?: (\").concat(REST, \"))?\"));\nclass FingerprintLine extends Line {\n constructor(fingerprint) {\n super();\n this.fingerprint = fingerprint;\n }\n static fromSdpLine(line) {\n if (!FingerprintLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(FingerprintLine.regex);\n var fingerprint = tokens[1];\n return new FingerprintLine(fingerprint);\n }\n toSdpLine() {\n return \"a=fingerprint:\".concat(this.fingerprint);\n }\n}\nFingerprintLine.regex = new RegExp(\"^fingerprint:(\".concat(REST, \")\"));\nfunction parseFmtpParams(fmtpParams) {\n fmtpParams = fmtpParams.replace(/^a=fmtp:\\d+\\x20/, '');\n var fmtpObj = new Map();\n if (/^\\d+([,/-]\\d+)+$/.test(fmtpParams)) {\n fmtpObj.set(fmtpParams, undefined);\n return fmtpObj;\n }\n fmtpParams.split(';').forEach(param => {\n var paramArr = param && param.split('=');\n if (paramArr.length !== 2 || !paramArr[0] || !paramArr[1]) {\n throw new Error(\"Fmtp params is invalid with \".concat(fmtpParams));\n }\n fmtpObj.set(paramArr[0], paramArr[1]);\n });\n return fmtpObj;\n}\nclass FmtpLine extends Line {\n constructor(payloadType, params) {\n super();\n this.payloadType = payloadType;\n this.params = params;\n }\n static fromSdpLine(line) {\n if (!FmtpLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(FmtpLine.regex);\n var payloadType = parseInt(tokens[1], 10);\n var params = tokens[2];\n return new FmtpLine(payloadType, parseFmtpParams(params));\n }\n toSdpLine() {\n var fmtParams = Array.from(this.params.keys()).map(key => {\n if (this.params.get(key) !== undefined) {\n return \"\".concat(key, \"=\").concat(this.params.get(key));\n }\n return \"\".concat(key);\n }).join(';');\n return \"a=fmtp:\".concat(this.payloadType, \" \").concat(fmtParams);\n }\n}\nFmtpLine.regex = new RegExp(\"^fmtp:(\".concat(NUM, \") (\").concat(REST, \")\"));\nclass IceOptionsLine extends Line {\n constructor(options) {\n super();\n this.options = options;\n }\n static fromSdpLine(line) {\n if (!IceOptionsLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(IceOptionsLine.regex);\n var options = tokens[1].split(' ');\n return new IceOptionsLine(options);\n }\n toSdpLine() {\n return \"a=ice-options:\".concat(this.options.join(' '));\n }\n}\nIceOptionsLine.regex = new RegExp(\"^ice-options:(\".concat(REST, \")$\"));\nclass IcePwdLine extends Line {\n constructor(pwd) {\n super();\n this.pwd = pwd;\n }\n static fromSdpLine(line) {\n if (!IcePwdLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(IcePwdLine.regex);\n var pwd = tokens[1];\n return new IcePwdLine(pwd);\n }\n toSdpLine() {\n return \"a=ice-pwd:\".concat(this.pwd);\n }\n}\nIcePwdLine.regex = new RegExp(\"^ice-pwd:(\".concat(ANY_NON_WS, \")$\"));\nclass IceUfragLine extends Line {\n constructor(ufrag) {\n super();\n this.ufrag = ufrag;\n }\n static fromSdpLine(line) {\n if (!IceUfragLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(IceUfragLine.regex);\n var ufrag = tokens[1];\n return new IceUfragLine(ufrag);\n }\n toSdpLine() {\n return \"a=ice-ufrag:\".concat(this.ufrag);\n }\n}\nIceUfragLine.regex = new RegExp(\"^ice-ufrag:(\".concat(ANY_NON_WS, \")$\"));\nclass MaxMessageSizeLine extends Line {\n constructor(maxMessageSize) {\n super();\n this.maxMessageSize = maxMessageSize;\n }\n static fromSdpLine(line) {\n if (!MaxMessageSizeLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(MaxMessageSizeLine.regex);\n var maxMessageSize = parseInt(tokens[1], 10);\n return new MaxMessageSizeLine(maxMessageSize);\n }\n toSdpLine() {\n return \"a=max-message-size:\".concat(this.maxMessageSize);\n }\n}\nMaxMessageSizeLine.regex = new RegExp(\"^max-message-size:(\".concat(NUM, \")\"));\nvar _a$2;\nclass MediaLine extends Line {\n constructor(type, port, protocol, formats) {\n super();\n this.type = type;\n this.port = port;\n this.protocol = protocol;\n this.formats = formats;\n }\n static fromSdpLine(line) {\n if (!MediaLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(MediaLine.regex);\n var type = tokens[1];\n var port = parseInt(tokens[2], 10);\n var protocol = tokens[3];\n var formats = tokens[4].split(' ');\n return new MediaLine(type, port, protocol, formats);\n }\n toSdpLine() {\n return \"m=\".concat(this.type, \" \").concat(this.port, \" \").concat(this.protocol, \" \").concat(this.formats.join(' '));\n }\n}\n_a$2 = MediaLine;\nMediaLine.MEDIA_TYPE = 'audio|video|application';\nMediaLine.regex = new RegExp(\"^(\".concat(_a$2.MEDIA_TYPE, \") (\").concat(NUM, \") (\").concat(ANY_NON_WS, \") (\").concat(REST, \")\"));\nclass MidLine extends Line {\n constructor(mid) {\n super();\n this.mid = mid;\n }\n static fromSdpLine(line) {\n if (!MidLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(MidLine.regex);\n var mid = tokens[1];\n return new MidLine(mid);\n }\n toSdpLine() {\n return \"a=mid:\".concat(this.mid);\n }\n}\nMidLine.regex = new RegExp(\"^mid:(\".concat(ANY_NON_WS, \")$\"));\nclass OriginLine extends Line {\n constructor(username, sessionId, sessionVersion, netType, addrType, ipAddr) {\n super();\n this.username = username;\n this.sessionId = sessionId;\n this.sessionVersion = sessionVersion;\n this.netType = netType;\n this.addrType = addrType;\n this.ipAddr = ipAddr;\n }\n static fromSdpLine(line) {\n if (!OriginLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(OriginLine.regex);\n var username = tokens[1];\n var sessionId = tokens[2];\n var sessionVersion = parseInt(tokens[3], 10);\n var netType = tokens[4];\n var addrType = tokens[5];\n var ipAddr = tokens[6];\n return new OriginLine(username, sessionId, sessionVersion, netType, addrType, ipAddr);\n }\n toSdpLine() {\n return \"o=\".concat(this.username, \" \").concat(this.sessionId, \" \").concat(this.sessionVersion, \" \").concat(this.netType, \" \").concat(this.addrType, \" \").concat(this.ipAddr);\n }\n}\nOriginLine.regex = new RegExp(\"^(\".concat(ANY_NON_WS, \") (\").concat(ANY_NON_WS, \") (\").concat(NUM, \") (\").concat(ANY_NON_WS, \") (\").concat(ANY_NON_WS, \") (\").concat(ANY_NON_WS, \")\"));\nvar _a$1;\nclass RidLine extends Line {\n constructor(id, direction, params) {\n super();\n this.id = id;\n this.direction = direction;\n this.params = params;\n }\n static fromSdpLine(line) {\n if (!RidLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(RidLine.regex);\n var id = tokens[1];\n var direction = tokens[2];\n var params = tokens[3];\n return new RidLine(id, direction, params);\n }\n toSdpLine() {\n var str = '';\n str += \"a=rid:\".concat(this.id, \" \").concat(this.direction);\n if (this.params) {\n str += \" \".concat(this.params);\n }\n return str;\n }\n}\n_a$1 = RidLine;\nRidLine.RID_ID = \"[\\\\w-]+\";\nRidLine.RID_DIRECTION = \"\\\\bsend\\\\b|\\\\brecv\\\\b\";\nRidLine.regex = new RegExp(\"^rid:(\".concat(_a$1.RID_ID, \") (\").concat(_a$1.RID_DIRECTION, \")(?:\").concat(SP, \"(\").concat(REST, \"))?\"));\nclass RtcpMuxLine extends Line {\n static fromSdpLine(line) {\n if (!RtcpMuxLine.regex.test(line)) {\n return undefined;\n }\n return new RtcpMuxLine();\n }\n toSdpLine() {\n return \"a=rtcp-mux\";\n }\n}\nRtcpMuxLine.regex = /^rtcp-mux$/;\nclass RtcpFbLine extends Line {\n constructor(payloadType, feedback) {\n super();\n this.payloadType = payloadType;\n this.feedback = feedback;\n }\n static fromSdpLine(line) {\n if (!RtcpFbLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(RtcpFbLine.regex);\n var payloadType = parseInt(tokens[1], 10);\n var feedback = tokens[2];\n return new RtcpFbLine(payloadType, feedback);\n }\n toSdpLine() {\n return \"a=rtcp-fb:\".concat(this.payloadType, \" \").concat(this.feedback);\n }\n}\nRtcpFbLine.regex = new RegExp(\"^rtcp-fb:(\".concat(NUM, \") (\").concat(REST, \")\"));\nvar _a$6;\nclass RtpMapLine extends Line {\n constructor(payloadType, encodingName, clockRate, encodingParams) {\n super();\n this.payloadType = payloadType;\n this.encodingName = encodingName;\n this.clockRate = clockRate;\n this.encodingParams = encodingParams;\n }\n static fromSdpLine(line) {\n if (!RtpMapLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(RtpMapLine.regex);\n var payloadType = parseInt(tokens[1], 10);\n var encodingName = tokens[2];\n var clockRate = parseInt(tokens[3], 10);\n var encodingParams = tokens[4];\n return new RtpMapLine(payloadType, encodingName, clockRate, encodingParams);\n }\n toSdpLine() {\n var str = '';\n str += \"a=rtpmap:\".concat(this.payloadType, \" \").concat(this.encodingName, \"/\").concat(this.clockRate);\n if (this.encodingParams) {\n str += \"/\".concat(this.encodingParams);\n }\n return str;\n }\n}\n_a$6 = RtpMapLine;\nRtpMapLine.NON_SLASH_TOKEN = '[^\\\\s/]+';\nRtpMapLine.regex = new RegExp(\"^rtpmap:(\".concat(NUM, \") (\").concat(_a$6.NON_SLASH_TOKEN, \")/(\").concat(_a$6.NON_SLASH_TOKEN, \")(?:/(\").concat(_a$6.NON_SLASH_TOKEN, \"))?\"));\nclass SctpPortLine extends Line {\n constructor(port) {\n super();\n this.port = port;\n }\n static fromSdpLine(line) {\n if (!SctpPortLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(SctpPortLine.regex);\n var port = parseInt(tokens[1], 10);\n return new SctpPortLine(port);\n }\n toSdpLine() {\n return \"a=sctp-port:\".concat(this.port);\n }\n}\nSctpPortLine.regex = new RegExp(\"^sctp-port:(\".concat(NUM, \")\"));\nclass SessionInformationLine extends Line {\n constructor(info) {\n super();\n this.info = info;\n }\n static fromSdpLine(line) {\n if (!SessionInformationLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(SessionInformationLine.regex);\n var info = tokens[1];\n return new SessionInformationLine(info);\n }\n toSdpLine() {\n return \"i=\".concat(this.info);\n }\n}\nSessionInformationLine.regex = new RegExp(\"(\".concat(REST, \")\"));\nclass SessionNameLine extends Line {\n constructor(name) {\n super();\n this.name = name;\n }\n static fromSdpLine(line) {\n if (!SessionNameLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(SessionNameLine.regex);\n var name = tokens[1];\n return new SessionNameLine(name);\n }\n toSdpLine() {\n return \"s=\".concat(this.name);\n }\n}\nSessionNameLine.regex = new RegExp(\"^(\".concat(REST, \")\"));\nclass SetupLine extends Line {\n constructor(setup) {\n super();\n this.setup = setup;\n }\n static fromSdpLine(line) {\n if (!SetupLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(SetupLine.regex);\n var setup = tokens[1];\n return new SetupLine(setup);\n }\n toSdpLine() {\n return \"a=setup:\".concat(this.setup);\n }\n}\nSetupLine.regex = /^setup:(actpass|active|passive)$/;\nclass SimulcastLayer {\n constructor(id, paused) {\n this.id = id;\n this.paused = paused;\n }\n toString() {\n return this.paused ? \"~\".concat(this.id) : this.id;\n }\n}\nclass SimulcastLayerList {\n constructor() {\n this.layers = [];\n }\n addLayer(layer) {\n this.layers.push([layer]);\n }\n addLayerWithAlternatives(alternatives) {\n this.layers.push(alternatives);\n }\n get length() {\n return this.layers.length;\n }\n get(index) {\n return this.layers[index];\n }\n static fromString(str) {\n var layerList = new SimulcastLayerList();\n var tokens = str.split(';');\n if (tokens.length === 1 && !tokens[0].trim()) {\n throw new Error('simulcast stream list empty');\n }\n tokens.forEach(token => {\n if (!token) {\n throw new Error('simulcast layer list empty');\n }\n var ridTokens = token.split(',');\n var layers = [];\n ridTokens.forEach(ridToken => {\n if (!ridToken || ridToken === '~') {\n throw new Error('rid empty');\n }\n var paused = ridToken[0] === '~';\n var rid = paused ? ridToken.substring(1) : ridToken;\n layers.push(new SimulcastLayer(rid, paused));\n });\n layerList.addLayerWithAlternatives(layers);\n });\n return layerList;\n }\n toString() {\n return this.layers.map(altArray => altArray.map(v => v.toString()).join(',')).join(';');\n }\n}\nclass SimulcastLine extends Line {\n constructor(sendLayers, recvLayers) {\n super();\n this.sendLayers = sendLayers;\n this.recvLayers = recvLayers;\n }\n static fromSdpLine(line) {\n if (!SimulcastLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(SimulcastLine.regex);\n var bidirectional = tokens[3] && tokens[4];\n var firstDirection = tokens[1];\n var layerList1 = SimulcastLayerList.fromString(tokens[2]);\n var layerList2 = new SimulcastLayerList();\n if (bidirectional) {\n var secondDirection = tokens[3];\n if (firstDirection === secondDirection) {\n return undefined;\n }\n layerList2 = SimulcastLayerList.fromString(tokens[4]);\n }\n var sendLayerList;\n var recvLayerList;\n if (firstDirection === 'send') {\n sendLayerList = layerList1;\n recvLayerList = layerList2;\n } else {\n sendLayerList = layerList2;\n recvLayerList = layerList1;\n }\n return new SimulcastLine(sendLayerList, recvLayerList);\n }\n toSdpLine() {\n var str = 'a=simulcast:';\n if (this.sendLayers.length) {\n str += \"send \".concat(this.sendLayers.toString());\n if (this.recvLayers.length) {\n str += \" \";\n }\n }\n if (this.recvLayers.length) {\n str += \"recv \".concat(this.recvLayers.toString());\n }\n return str;\n }\n}\nSimulcastLine.regex = new RegExp(\"^simulcast:(send|recv) (\".concat(ANY_NON_WS, \")(?: (send|recv) (\").concat(ANY_NON_WS, \"))?\"));\nclass SsrcLine extends Line {\n constructor(ssrcId, attribute) {\n var attributeValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n var attributeData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;\n super();\n this.ssrcId = ssrcId;\n this.attribute = attribute;\n this.attributeValue = attributeValue;\n this.attributeData = attributeData;\n }\n static fromSdpLine(line) {\n if (!SsrcLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(SsrcLine.regex);\n var ssrcId = parseInt(tokens[1], 10);\n var attribute = tokens[2];\n var attributeValue = tokens[3];\n var attributeData = tokens[4];\n return new SsrcLine(ssrcId, attribute, attributeValue, attributeData);\n }\n toSdpLine() {\n var str = \"a=ssrc:\".concat(this.ssrcId, \" \").concat(this.attribute);\n if (this.attributeValue) {\n str += \":\".concat(this.attributeValue);\n }\n if (this.attributeData) {\n str += \" \".concat(this.attributeData);\n }\n return str;\n }\n}\nSsrcLine.regex = new RegExp(\"^ssrc:(\".concat(NUM, \") (\").concat(SDP_TOKEN, \")(?::(\").concat(SDP_TOKEN, \")?(?: (\").concat(ANY_NON_WS, \"))?)?$\"));\nclass SsrcGroupLine extends Line {\n constructor(semantics, ssrcs) {\n super();\n this.semantics = semantics;\n this.ssrcs = ssrcs;\n }\n static fromSdpLine(line) {\n if (!SsrcGroupLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(SsrcGroupLine.regex);\n var semantics = tokens[1];\n var ssrcs = tokens[2].split(' ').map(ssrcStr => parseInt(ssrcStr, 10));\n return new SsrcGroupLine(semantics, ssrcs);\n }\n toSdpLine() {\n return \"a=ssrc-group:\".concat(this.semantics, \" \").concat(this.ssrcs.join(' '));\n }\n}\nSsrcGroupLine.regex = new RegExp(\"^ssrc-group:(SIM|FID|FEC) ((?:\".concat(NUM).concat(SP, \"*)+)\"));\nclass TimingLine extends Line {\n constructor(startTime, stopTime) {\n super();\n this.startTime = startTime;\n this.stopTime = stopTime;\n }\n static fromSdpLine(line) {\n if (!TimingLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(TimingLine.regex);\n var startTime = parseInt(tokens[1], 10);\n var stopTime = parseInt(tokens[2], 10);\n return new TimingLine(startTime, stopTime);\n }\n toSdpLine() {\n return \"t=\".concat(this.startTime, \" \").concat(this.stopTime);\n }\n}\nTimingLine.regex = new RegExp(\"^(\".concat(NUM, \") (\").concat(NUM, \")\"));\nclass VersionLine extends Line {\n constructor(version) {\n super();\n this.version = version;\n }\n static fromSdpLine(line) {\n if (!VersionLine.regex.test(line)) {\n return undefined;\n }\n var tokens = line.match(VersionLine.regex);\n var version = parseInt(tokens[1], 10);\n return new VersionLine(version);\n }\n toSdpLine() {\n return \"v=\".concat(this.version);\n }\n}\nVersionLine.regex = new RegExp(\"^(\".concat(NUM, \")$\"));\nclass UnknownLine extends Line {\n constructor(value) {\n super();\n this.value = value;\n }\n static fromSdpLine(line) {\n var tokens = line.match(UnknownLine.regex);\n var value = tokens[1];\n return new UnknownLine(value);\n }\n toSdpLine() {\n return \"\".concat(this.value);\n }\n}\nUnknownLine.regex = new RegExp(\"(\".concat(REST, \")\"));\nclass IceInfo {\n constructor() {\n this.candidates = [];\n }\n addLine(line) {\n if (line instanceof IceUfragLine) {\n this.ufrag = line;\n return true;\n }\n if (line instanceof IcePwdLine) {\n this.pwd = line;\n return true;\n }\n if (line instanceof IceOptionsLine) {\n this.options = line;\n return true;\n }\n if (line instanceof CandidateLine) {\n this.candidates.push(line);\n return true;\n }\n return false;\n }\n toLines() {\n var lines = [];\n if (this.ufrag) {\n lines.push(this.ufrag);\n }\n if (this.pwd) {\n lines.push(this.pwd);\n }\n if (this.options) {\n lines.push(this.options);\n }\n this.candidates.forEach(candidate => lines.push(candidate));\n return lines;\n }\n}\nclass MediaDescription {\n constructor(type, port, protocol) {\n this.iceInfo = new IceInfo();\n this.otherLines = [];\n this.type = type;\n this.port = port;\n this.protocol = protocol;\n }\n findOtherLine(ty) {\n return this.otherLines.find(line => line instanceof ty);\n }\n addLine(line) {\n if (line instanceof BundleGroupLine) {\n throw new Error(\"Error: bundle group line not allowed in media description\");\n }\n if (line instanceof BandwidthLine) {\n this.bandwidth = line;\n return true;\n }\n if (line instanceof MidLine) {\n this.mid = line.mid;\n return true;\n }\n if (line instanceof FingerprintLine) {\n this.fingerprint = line.fingerprint;\n return true;\n }\n if (line instanceof SetupLine) {\n this.setup = line.setup;\n return true;\n }\n if (line instanceof ConnectionLine) {\n this.connection = line;\n return true;\n }\n if (line instanceof ContentLine) {\n this.content = line;\n return true;\n }\n return this.iceInfo.addLine(line);\n }\n}\nclass ApplicationMediaDescription extends MediaDescription {\n constructor(mediaLine) {\n super(mediaLine.type, mediaLine.port, mediaLine.protocol);\n this.fmts = [];\n this.fmts = mediaLine.formats;\n }\n toLines() {\n var lines = [];\n lines.push(new MediaLine(this.type, this.port, this.protocol, this.fmts));\n if (this.connection) {\n lines.push(this.connection);\n }\n if (this.bandwidth) {\n lines.push(this.bandwidth);\n }\n lines.push(...this.iceInfo.toLines());\n if (this.fingerprint) {\n lines.push(new FingerprintLine(this.fingerprint));\n }\n if (this.setup) {\n lines.push(new SetupLine(this.setup));\n }\n if (this.mid) {\n lines.push(new MidLine(this.mid));\n }\n if (this.content) {\n lines.push(this.content);\n }\n if (this.sctpPort) {\n lines.push(new SctpPortLine(this.sctpPort));\n }\n if (this.maxMessageSize) {\n lines.push(new MaxMessageSizeLine(this.maxMessageSize));\n }\n lines.push(...this.otherLines);\n return lines;\n }\n addLine(line) {\n if (super.addLine(line)) {\n return true;\n }\n if (line instanceof MediaLine) {\n throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');\n }\n if (line instanceof SctpPortLine) {\n this.sctpPort = line.port;\n return true;\n }\n if (line instanceof MaxMessageSizeLine) {\n this.maxMessageSize = line.maxMessageSize;\n return true;\n }\n this.otherLines.push(line);\n return true;\n }\n}\nclass CodecInfo {\n constructor(pt) {\n this.fmtParams = new Map();\n this.feedback = [];\n this.pt = pt;\n }\n addLine(line) {\n if (line instanceof RtpMapLine) {\n this.name = line.encodingName;\n this.clockRate = line.clockRate;\n this.encodingParams = line.encodingParams;\n return true;\n }\n if (line instanceof FmtpLine) {\n this.fmtParams = new Map([...Array.from(this.fmtParams.entries()), ...Array.from(line.params.entries())]);\n if (line.params.has('apt')) {\n var apt = line.params.get('apt');\n this.primaryCodecPt = parseInt(apt, 10);\n }\n return true;\n }\n if (line instanceof RtcpFbLine) {\n this.feedback.push(line.feedback);\n return true;\n }\n return false;\n }\n toLines() {\n var lines = [];\n if (this.name && this.clockRate) {\n lines.push(new RtpMapLine(this.pt, this.name, this.clockRate, this.encodingParams));\n }\n this.feedback.forEach(fb => {\n lines.push(new RtcpFbLine(this.pt, fb));\n });\n if (this.fmtParams.size > 0) {\n lines.push(new FmtpLine(this.pt, this.fmtParams));\n }\n return lines;\n }\n}\nclass AvMediaDescription extends MediaDescription {\n constructor(mediaLine) {\n super(mediaLine.type, mediaLine.port, mediaLine.protocol);\n this.pts = [];\n this.extMaps = new Map();\n this.rids = [];\n this.codecs = new Map();\n this.rtcpMux = false;\n this.ssrcs = [];\n this.ssrcGroups = [];\n this.pts = mediaLine.formats.map(fmt => {\n return parseInt(fmt, 10);\n });\n this.pts.forEach(pt => this.codecs.set(pt, new CodecInfo(pt)));\n }\n toLines() {\n var lines = [];\n lines.push(new MediaLine(this.type, this.port, this.protocol, this.pts.map(pt => \"\".concat(pt))));\n if (this.connection) {\n lines.push(this.connection);\n }\n if (this.bandwidth) {\n lines.push(this.bandwidth);\n }\n lines.push(...this.iceInfo.toLines());\n if (this.fingerprint) {\n lines.push(new FingerprintLine(this.fingerprint));\n }\n if (this.setup) {\n lines.push(new SetupLine(this.setup));\n }\n if (this.mid) {\n lines.push(new MidLine(this.mid));\n }\n if (this.rtcpMux) {\n lines.push(new RtcpMuxLine());\n }\n if (this.content) {\n lines.push(this.content);\n }\n this.extMaps.forEach(extMap => lines.push(extMap));\n this.rids.forEach(rid => lines.push(rid));\n if (this.simulcast) {\n lines.push(this.simulcast);\n }\n if (this.direction) {\n lines.push(new DirectionLine(this.direction));\n }\n this.codecs.forEach(codec => lines.push(...codec.toLines()));\n lines.push(...this.ssrcs);\n lines.push(...this.ssrcGroups);\n lines.push(...this.otherLines);\n return lines;\n }\n addLine(line) {\n if (super.addLine(line)) {\n return true;\n }\n if (line instanceof MediaLine) {\n throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');\n }\n if (line instanceof DirectionLine) {\n this.direction = line.direction;\n return true;\n }\n if (line instanceof ExtMapLine) {\n if (this.extMaps.has(line.id)) {\n throw new Error(\"Tried to extension with duplicate ID: an extension already exists with ID \".concat(line.id));\n }\n this.extMaps.set(line.id, line);\n return true;\n }\n if (line instanceof RidLine) {\n this.rids.push(line);\n return true;\n }\n if (line instanceof RtcpMuxLine) {\n this.rtcpMux = true;\n return true;\n }\n if (line instanceof SimulcastLine) {\n this.simulcast = line;\n return true;\n }\n if (line instanceof RtpMapLine || line instanceof FmtpLine || line instanceof RtcpFbLine) {\n var codec = this.codecs.get(line.payloadType);\n if (!codec) {\n throw new Error(\"Error: got line for unknown codec: \".concat(line.toSdpLine()));\n }\n codec.addLine(line);\n return true;\n }\n if (line instanceof SsrcLine) {\n this.ssrcs.push(line);\n return true;\n }\n if (line instanceof SsrcGroupLine) {\n this.ssrcGroups.push(line);\n return true;\n }\n this.otherLines.push(line);\n return true;\n }\n getCodecByPt(pt) {\n return this.codecs.get(pt);\n }\n removePt(pt) {\n var associatedPts = [...this.codecs.values()].filter(ci => ci.primaryCodecPt === pt).map(ci => ci.pt);\n var allPtsToRemove = [pt, ...associatedPts];\n allPtsToRemove.forEach(ptToRemove => {\n this.codecs.delete(ptToRemove);\n });\n this.pts = this.pts.filter(existingPt => allPtsToRemove.indexOf(existingPt) === -1);\n }\n addExtension(_ref) {\n var {\n uri,\n direction,\n attributes,\n id\n } = _ref;\n var getFirstFreeId = () => {\n var freeId = 1;\n for (;;) {\n if (!this.extMaps.has(freeId)) {\n break;\n }\n freeId += 1;\n }\n return freeId;\n };\n var extId = id || getFirstFreeId();\n if (this.extMaps.has(extId)) {\n throw new Error(\"Extension with ID \".concat(id, \" already exists\"));\n }\n if (extId === 0) {\n throw new Error(\"Extension ID 0 is reserved\");\n }\n this.extMaps.set(extId, new ExtMapLine(extId, uri, direction, attributes));\n }\n}\nclass SessionDescription {\n constructor() {\n this.groups = [];\n this.otherLines = [];\n }\n addLine(line) {\n if (line instanceof VersionLine) {\n this.version = line;\n return true;\n }\n if (line instanceof OriginLine) {\n this.origin = line;\n return true;\n }\n if (line instanceof SessionNameLine) {\n this.sessionName = line;\n return true;\n }\n if (line instanceof SessionInformationLine) {\n this.information = line;\n return true;\n }\n if (line instanceof TimingLine) {\n this.timing = line;\n return true;\n }\n if (line instanceof ConnectionLine) {\n this.connection = line;\n return true;\n }\n if (line instanceof BandwidthLine) {\n this.bandwidth = line;\n return true;\n }\n if (line instanceof BundleGroupLine) {\n this.groups.push(line);\n return true;\n }\n this.otherLines.push(line);\n return true;\n }\n toLines() {\n var lines = [];\n if (this.version) {\n lines.push(this.version);\n }\n if (this.origin) {\n lines.push(this.origin);\n }\n if (this.sessionName) {\n lines.push(this.sessionName);\n }\n if (this.information) {\n lines.push(this.information);\n }\n if (this.connection) {\n lines.push(this.connection);\n }\n if (this.bandwidth) {\n lines.push(this.bandwidth);\n }\n if (this.timing) {\n lines.push(this.timing);\n }\n if (this.groups) {\n lines.push(...this.groups);\n }\n lines.push(...this.otherLines);\n return lines;\n }\n}\nclass Sdp {\n constructor() {\n this.session = new SessionDescription();\n this.media = [];\n }\n get avMedia() {\n return this.media.filter(mi => mi instanceof AvMediaDescription);\n }\n toString() {\n var lines = [];\n lines.push(...this.session.toLines());\n this.media.forEach(m => lines.push(...m.toLines()));\n return \"\".concat(lines.map(l => l.toSdpLine()).join('\\r\\n'), \"\\r\\n\");\n }\n}\nclass Grammar {\n constructor() {\n this.parsers = new Map();\n }\n addParser(lineType, parser) {\n var parsers = this.parsers.get(lineType) || [];\n parsers.push(parser);\n this.parsers.set(lineType, parsers);\n }\n getParsers(lineType) {\n return this.parsers.get(lineType) || [];\n }\n}\nclass SdpGrammar extends Grammar {\n constructor() {\n super();\n this.addParser('v', VersionLine.fromSdpLine);\n this.addParser('o', OriginLine.fromSdpLine);\n this.addParser('c', ConnectionLine.fromSdpLine);\n this.addParser('i', SessionInformationLine.fromSdpLine);\n this.addParser('m', MediaLine.fromSdpLine);\n this.addParser('s', SessionNameLine.fromSdpLine);\n this.addParser('t', TimingLine.fromSdpLine);\n this.addParser('b', BandwidthLine.fromSdpLine);\n this.addParser('a', RtpMapLine.fromSdpLine);\n this.addParser('a', RtcpFbLine.fromSdpLine);\n this.addParser('a', FmtpLine.fromSdpLine);\n this.addParser('a', DirectionLine.fromSdpLine);\n this.addParser('a', ExtMapLine.fromSdpLine);\n this.addParser('a', MidLine.fromSdpLine);\n this.addParser('a', IceUfragLine.fromSdpLine);\n this.addParser('a', IcePwdLine.fromSdpLine);\n this.addParser('a', IceOptionsLine.fromSdpLine);\n this.addParser('a', FingerprintLine.fromSdpLine);\n this.addParser('a', SetupLine.fromSdpLine);\n this.addParser('a', SctpPortLine.fromSdpLine);\n this.addParser('a', MaxMessageSizeLine.fromSdpLine);\n this.addParser('a', RtcpMuxLine.fromSdpLine);\n this.addParser('a', BundleGroupLine.fromSdpLine);\n this.addParser('a', ContentLine.fromSdpLine);\n this.addParser('a', RidLine.fromSdpLine);\n this.addParser('a', CandidateLine.fromSdpLine);\n this.addParser('a', SimulcastLine.fromSdpLine);\n this.addParser('a', SsrcLine.fromSdpLine);\n this.addParser('a', SsrcGroupLine.fromSdpLine);\n }\n}\nvar DefaultSdpGrammar = new SdpGrammar();\nfunction isValidLine(line) {\n return line.length > 2;\n}\nfunction parseToModel(lines) {\n var sdp = new Sdp();\n var currBlock = sdp.session;\n lines.forEach(l => {\n if (l instanceof MediaLine) {\n var mediaInfo;\n if (l.type === 'audio' || l.type === 'video') {\n mediaInfo = new AvMediaDescription(l);\n } else if (l.type === 'application') {\n mediaInfo = new ApplicationMediaDescription(l);\n } else {\n throw new Error(\"Unhandled media type: \".concat(l.type));\n }\n sdp.media.push(mediaInfo);\n currBlock = mediaInfo;\n } else {\n currBlock.addLine(l);\n }\n });\n return sdp;\n}\nfunction parseToLines(sdp, grammar) {\n var lines = [];\n sdp.split(/(\\r\\n|\\r|\\n)/).filter(isValidLine).forEach(l => {\n var lineType = l[0];\n var lineValue = l.slice(2);\n var parsers = grammar.getParsers(lineType);\n for (var parser of parsers) {\n var _result = parser(lineValue);\n if (_result) {\n lines.push(_result);\n return;\n }\n }\n var result = UnknownLine.fromSdpLine(l);\n lines.push(result);\n });\n return lines;\n}\nfunction parse(sdp) {\n var grammar = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DefaultSdpGrammar;\n var lines = parseToLines(sdp, grammar);\n var parsed = parseToModel(lines);\n return parsed;\n}\n\nfunction getLocalTrackInfo(kind, direction, localTrack) {\n return {\n trackOrKind: localTrack || kind,\n direction\n };\n}\nfunction hasH264Codec(mediaLine) {\n for (var codec of mediaLine.codecs.values()) {\n var _codec$name;\n if (((_codec$name = codec.name) === null || _codec$name === void 0 ? void 0 : _codec$name.toUpperCase()) === 'H264') {\n return true;\n }\n }\n return false;\n}\nfunction checkSdpForErrors(options, sdp) {\n if (!sdp) {\n return new Error('SDP is missing');\n }\n var parsedSdp = parse(sdp);\n for (var mediaLine of parsedSdp.avMedia) {\n if (!mediaLine.iceInfo.candidates.length) {\n return new IceGatheringError(\"ice candidates missing for m-line with mid=\".concat(mediaLine.mid));\n }\n if (!options.allowPort0 && mediaLine.port === 0) {\n return new SdpError(\"Found invalid port number 0 at m-line with mid=\".concat(mediaLine.mid));\n }\n if (!mediaLine.iceInfo.pwd || !mediaLine.iceInfo.ufrag) {\n return new IceGatheringError(\"ice ufrag and password not found for m-line with mid=\".concat(mediaLine.mid));\n }\n if (options.requireH264 && mediaLine.type === 'video' && !hasH264Codec(mediaLine)) {\n return new SdpError(\"H264 codec is missing for video media description with mid=\".concat(mediaLine.mid));\n }\n }\n return false;\n}\nfunction convertCLineToIPv4(sdp) {\n var convertConnectionProp = connection => {\n if ((connection === null || connection === void 0 ? void 0 : connection.addrType) === 'IP6') {\n connection.addrType = 'IP4';\n connection.ipAddr = '0.0.0.0';\n }\n };\n convertConnectionProp(sdp.session.connection);\n sdp.media.forEach(media => {\n convertConnectionProp(media.connection);\n });\n}\nfunction convertPort9to0(sdp) {\n sdp.media.forEach(media => {\n if (media.port === 9) {\n media.port = 0;\n }\n });\n}\nfunction setContentSlides(sdp) {\n var videoMediaDescriptions = sdp.avMedia.filter(media => media.type === 'video');\n if (videoMediaDescriptions.length === 2) {\n videoMediaDescriptions[1].addLine(new ContentLine(['slides']));\n }\n}\nclass AnyLine extends Line {\n constructor(value) {\n super();\n _defineProperty(this, \"value\", void 0);\n this.value = value;\n }\n static fromSdpLine() {\n return undefined;\n }\n toSdpLine() {\n return \"a=\".concat(this.value);\n }\n}\nfunction addBandwidthLimits(sdp, limits) {\n sdp.avMedia.forEach(media => {\n if (media.type === 'audio') {\n media.addLine(new BandwidthLine('TIAS', limits.audio));\n } else if (media.type === 'video') {\n media.addLine(new BandwidthLine('TIAS', limits.video));\n }\n });\n}\nfunction addPeriodicKeyframes(sdp, value) {\n sdp.avMedia.forEach(media => {\n if (media.type === 'video') {\n media.addLine(new AnyLine(\"periodic-keyframes:\".concat(value)));\n }\n });\n}\nfunction disableExtmap(sdp) {\n sdp.avMedia.forEach(media => {\n media.extMaps.clear();\n });\n}\nfunction updateH264fmtpParams(sdp, paramsToUpdate) {\n sdp.avMedia.forEach(media => {\n if (media.type === 'video') {\n media.codecs.forEach(codec => {\n var _codec$name2;\n if (((_codec$name2 = codec.name) === null || _codec$name2 === void 0 ? void 0 : _codec$name2.toUpperCase()) === 'H264') {\n paramsToUpdate.forEach((value, key) => codec.fmtParams.set(key, value));\n }\n });\n }\n });\n}\nfunction adjustH264Profile(sdp, maxFsValue) {\n var maxFsForProfileLevel = {\n 10: 99,\n 11: 396,\n 12: 396,\n 13: 396,\n 20: 396,\n 21: 792,\n 22: 1620,\n 30: 1620,\n 31: 3600,\n 32: 5120,\n 40: 8192,\n 41: 8192,\n 42: 8704,\n 50: 22080,\n 51: 36864,\n 52: 36864,\n 60: 139264,\n 61: 139264,\n 62: 139264\n };\n var framesPerSecond = 30;\n sdp.avMedia.forEach(media => {\n if (media.type === 'video') {\n media.codecs.forEach(codec => {\n var _codec$name3;\n if (((_codec$name3 = codec.name) === null || _codec$name3 === void 0 ? void 0 : _codec$name3.toUpperCase()) === 'H264') {\n var profileLevelIdValue = codec.fmtParams.get('profile-level-id');\n if (profileLevelIdValue) {\n var profile = profileLevelIdValue.substring(0, 4).toLowerCase();\n var levelId = parseInt(profileLevelIdValue.substring(4, 6), 16);\n if (!maxFsForProfileLevel[levelId]) {\n throw new Error(\"found unsupported h264 profile level id value in the SDP: \".concat(levelId));\n }\n if (maxFsForProfileLevel[levelId] === maxFsValue) {\n return;\n }\n if (maxFsForProfileLevel[levelId] < maxFsValue) {\n codec.fmtParams.set('max-fs', \"\".concat(maxFsValue));\n codec.fmtParams.set('max-mbps', \"\".concat(maxFsValue * framesPerSecond));\n return;\n }\n var newLevelId = Object.keys(maxFsForProfileLevel).reverse().find(key => maxFsForProfileLevel[key] === maxFsValue);\n if (newLevelId) {\n var newLevelIdHex = parseInt(newLevelId, 10).toString(16);\n codec.fmtParams.set('profile-level-id', \"\".concat(profile).concat(newLevelIdHex));\n codec.fmtParams.set('max-mbps', \"\".concat(maxFsValue * framesPerSecond));\n return;\n }\n throw new Error(\"unsupported maxFsValue: \".concat(maxFsValue));\n }\n }\n });\n }\n });\n}\nfunction disableRtx(sdp) {\n sdp.avMedia.forEach(media => {\n var payloadTypesToRemove = [];\n media.codecs.forEach((codec, codecPt) => {\n if (codec.name === 'rtx' && codec.primaryCodecPt) {\n payloadTypesToRemove.push(codecPt);\n }\n });\n payloadTypesToRemove.forEach(pt => media.codecs.delete(pt));\n media.pts = media.pts.filter(pt => !payloadTypesToRemove.includes(pt));\n });\n}\nfunction copyClineToSession(sdp) {\n var mediaDescriptionWithCline = sdp.media.find(media => media.connection);\n if (mediaDescriptionWithCline) {\n sdp.session.connection = mediaDescriptionWithCline.connection;\n }\n}\nfunction mungeLocalSdpForBrowser(config, sdp) {\n var parsedSdp = parse(sdp);\n if (config.disableRtx) {\n disableRtx(parsedSdp);\n }\n return parsedSdp.toString();\n}\nfunction mungeLocalSdp(config, sdp) {\n var parsedSdp = parse(sdp);\n if (config.convertCLineToIPv4) {\n convertCLineToIPv4(parsedSdp);\n }\n if (config.bandwidthLimits) {\n addBandwidthLimits(parsedSdp, config.bandwidthLimits);\n }\n if (config.periodicKeyframes) {\n addPeriodicKeyframes(parsedSdp, config.periodicKeyframes);\n }\n if (config.convertPort9to0) {\n convertPort9to0(parsedSdp);\n }\n if (config.addContentSlides) {\n setContentSlides(parsedSdp);\n }\n if (config.disableExtmap) {\n disableExtmap(parsedSdp);\n }\n if (config.h264MaxFs) {\n adjustH264Profile(parsedSdp, config.h264MaxFs);\n }\n if (config.copyClineToSessionLevel) {\n copyClineToSession(parsedSdp);\n }\n return parsedSdp.toString();\n}\nfunction setStartBitrate(sdp, startBitrate) {\n updateH264fmtpParams(sdp, new Map([['x-google-start-bitrate', startBitrate.toString()]]));\n}\nfunction removeXtlsIceCandidates(sdp) {\n sdp.media.forEach(media => {\n media.iceInfo.candidates = media.iceInfo.candidates.filter(candidate => candidate.transport.toLowerCase() !== 'xtls');\n });\n}\nfunction mungeRemoteSdp(config, sdp) {\n var parsedSdp = parse(sdp);\n if (config.startBitrate) {\n setStartBitrate(parsedSdp, config.startBitrate);\n }\n if (config.disableExtmap) {\n disableExtmap(parsedSdp);\n }\n removeXtlsIceCandidates(parsedSdp);\n return parsedSdp.toString();\n}\n\nvar MediaConnectionEventNames;\n(function (MediaConnectionEventNames) {\n MediaConnectionEventNames[\"ICE_GATHERING_STATE_CHANGED\"] = \"iceGatheringState:changed\";\n MediaConnectionEventNames[\"PEER_CONNECTION_STATE_CHANGED\"] = \"peerConnectionState:changed\";\n MediaConnectionEventNames[\"ICE_CONNECTION_STATE_CHANGED\"] = \"iceConnectionState:changed\";\n MediaConnectionEventNames[\"REMOTE_TRACK_ADDED\"] = \"remoteTrack:added\";\n MediaConnectionEventNames[\"ROAP_MESSAGE_TO_SEND\"] = \"roap:messageToSend\";\n MediaConnectionEventNames[\"ROAP_STARTED\"] = \"roap:started\";\n MediaConnectionEventNames[\"ROAP_FAILURE\"] = \"roap:failure\";\n MediaConnectionEventNames[\"ROAP_DONE\"] = \"roap:done\";\n MediaConnectionEventNames[\"DTMF_TONE_CHANGED\"] = \"dtmfTone:changed\";\n MediaConnectionEventNames[\"ACTIVE_SPEAKERS_CHANGED\"] = \"activeSpeakers:changed\";\n MediaConnectionEventNames[\"VIDEO_SOURCES_COUNT_CHANGED\"] = \"videoSourcesCount:changed\";\n MediaConnectionEventNames[\"AUDIO_SOURCES_COUNT_CHANGED\"] = \"audioSourcesCount:changed\";\n MediaConnectionEventNames[\"REMOTE_SDP_ANSWER_PROCESSED\"] = \"remoteSdpAnswer:processed\";\n MediaConnectionEventNames[\"REMOTE_SDP_OFFER_PROCESSED\"] = \"remoteSdpOffer:processed\";\n MediaConnectionEventNames[\"LOCAL_SDP_OFFER_GENERATED\"] = \"localSdpOffer:processed\";\n MediaConnectionEventNames[\"LOCAL_SDP_ANSWER_GENERATED\"] = \"localSdpAnswer:processed\";\n MediaConnectionEventNames[\"ICE_CANDIDATE\"] = \"iceCandidate\";\n MediaConnectionEventNames[\"ICE_CANDIDATE_ERROR\"] = \"iceCandidate:error\";\n})(MediaConnectionEventNames || (MediaConnectionEventNames = {}));\nvar RemoteTrackType;\n(function (RemoteTrackType) {\n RemoteTrackType[\"AUDIO\"] = \"audio\";\n RemoteTrackType[\"VIDEO\"] = \"video\";\n RemoteTrackType[\"SCREENSHARE_VIDEO\"] = \"screenShareVideo\";\n})(RemoteTrackType || (RemoteTrackType = {}));\nvar ErrorType;\n(function (ErrorType) {\n ErrorType[\"DOUBLECONFLICT\"] = \"DOUBLECONFLICT\";\n ErrorType[\"CONFLICT\"] = \"CONFLICT\";\n ErrorType[\"FAILED\"] = \"FAILED\";\n ErrorType[\"INVALID_STATE\"] = \"INVALID_STATE\";\n ErrorType[\"NOMATCH\"] = \"NOMATCH\";\n ErrorType[\"OUT_OF_ORDER\"] = \"OUT_OF_ORDER\";\n ErrorType[\"REFUSED\"] = \"REFUSED\";\n ErrorType[\"RETRY\"] = \"RETRY\";\n ErrorType[\"TIMEOUT\"] = \"TIMEOUT\";\n})(ErrorType || (ErrorType = {}));\n\nfunction ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar localTrackTypes = [{\n type: 'audio',\n kind: 'audio'\n}, {\n type: 'video',\n kind: 'video'\n}, {\n type: 'screenShareVideo',\n kind: 'video'\n}];\nclass MediaConnection extends EventEmitter$5 {\n constructor(mediaConnectionConfig, options) {\n var metricsCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};\n var debugId = arguments.length > 3 ? arguments[3] : undefined;\n super();\n _defineProperty(this, \"id\", void 0);\n _defineProperty(this, \"config\", void 0);\n _defineProperty(this, \"pc\", void 0);\n _defineProperty(this, \"localTracks\", void 0);\n _defineProperty(this, \"transceivers\", void 0);\n _defineProperty(this, \"mediaDirection\", void 0);\n _defineProperty(this, \"remoteQualityLevel\", void 0);\n _defineProperty(this, \"metricsCallback\", void 0);\n _defineProperty(this, \"forceStatsReport\", void 0);\n this.config = mediaConnectionConfig;\n this.metricsCallback = metricsCallback;\n this.mediaDirection = _objectSpread$4({}, options.direction);\n this.localTracks = _objectSpread$4({}, options.localTracks);\n this.remoteQualityLevel = options.remoteQualityLevel;\n this.id = debugId || 'MediaConnection';\n this.transceivers = {};\n this.pc = new window.RTCPeerConnection({\n iceServers: this.config.iceServers,\n bundlePolicy: 'max-compat'\n });\n this.forceStatsReport = rtcStats_1$1(this.pc, data => this.metricsCallback(data), 5000).forceStatsReport;\n this.pc.ontrack = this.onTrack.bind(this);\n this.pc.oniceconnectionstatechange = this.onIceConnectionStateChange.bind(this);\n this.pc.onconnectionstatechange = this.onPeerConnectionStateChange.bind(this);\n this.pc.addEventListener('icecandidate', event => {\n this.emit(MediaConnectionEventNames.ICE_CANDIDATE, {\n candidate: event.candidate\n });\n });\n this.pc.addEventListener('icecandidateerror', event => {\n this.emit(MediaConnectionEventNames.ICE_CANDIDATE_ERROR, {\n error: event\n });\n });\n }\n log(action, description) {\n getLogger().info(\"\".concat(this.id, \":\").concat(action, \" \").concat(description));\n }\n warn(action, description) {\n getLogger().warn(\"\".concat(this.id, \":\").concat(action, \" \").concat(description));\n }\n error(action, description, error) {\n getLogger().error(\"\".concat(this.id, \":\").concat(action, \" \").concat(description, \" \").concat(getErrorDescription(error)));\n }\n createTransceivers() {\n localTrackTypes.forEach(_ref => {\n var {\n type,\n kind\n } = _ref;\n var trackType = type;\n var transceiverType = type;\n var trackInfo = getLocalTrackInfo(kind, this.mediaDirection[trackType], this.localTracks[trackType]);\n if (!this.config.skipInactiveTransceivers || trackInfo.direction !== 'inactive') {\n this.transceivers[transceiverType] = this.pc.addTransceiver(trackInfo.trackOrKind, {\n direction: trackInfo.direction\n });\n }\n });\n this.setupTransceiverListeners();\n }\n initializeTransceivers(incomingOffer) {\n if (this.pc.getTransceivers().length > 0) {\n this.error('initiateOffer()', 'SDP negotiation already started');\n throw new Error('SDP negotiation already started');\n }\n if (incomingOffer) {\n this.addLocalTracks();\n } else {\n this.createTransceivers();\n }\n }\n close() {\n this.pc.close();\n this.pc.ontrack = null;\n this.pc.oniceconnectionstatechange = null;\n this.pc.onconnectionstatechange = null;\n this.pc.onicegatheringstatechange = null;\n this.pc.onicecandidate = null;\n this.pc.onicecandidateerror = null;\n }\n getConfig() {\n return this.config;\n }\n getMetricsCallback() {\n return this.metricsCallback;\n }\n getSendReceiveOptions() {\n return {\n localTracks: this.localTracks,\n direction: this.mediaDirection,\n remoteQualityLevel: this.remoteQualityLevel\n };\n }\n updateRemoteQualityLevel(newValue) {\n if (newValue !== this.remoteQualityLevel) {\n this.remoteQualityLevel = newValue;\n return true;\n }\n return false;\n }\n updateTransceivers(options) {\n var newOfferNeeded = false;\n this.mediaDirection.audio = options.direction.audio;\n this.mediaDirection.video = options.direction.video;\n this.mediaDirection.screenShareVideo = options.direction.screenShareVideo;\n this.identifyTransceivers();\n localTrackTypes.forEach(_ref2 => {\n var {\n type,\n kind\n } = _ref2;\n var trackType = type;\n var transceiverType = type;\n var track = options.localTracks[trackType];\n var transceiver = this.transceivers[transceiverType];\n if (track !== undefined && track !== this.localTracks[trackType]) {\n this.localTracks[trackType] = track;\n if (transceiver) {\n this.log('updateTransceivers()', \"replacing sender track on \\\"\".concat(type, \"\\\" transceiver\"));\n transceiver.sender.replaceTrack(track);\n }\n }\n if (transceiver) {\n var trackInfo = getLocalTrackInfo(kind, this.mediaDirection[trackType], this.localTracks[trackType]);\n if (transceiver.direction !== trackInfo.direction) {\n this.log('updateTransceivers()', \"updating direction to \".concat(trackInfo.direction, \" on \\\"\").concat(type, \"\\\" transceiver\"));\n transceiver.direction = trackInfo.direction;\n newOfferNeeded = true;\n }\n }\n });\n return newOfferNeeded;\n }\n updateLocalTracks(tracks) {\n return this.updateTransceivers({\n localTracks: tracks,\n direction: _objectSpread$4({}, this.mediaDirection)\n });\n }\n updateDirection(direction) {\n return this.updateTransceivers({\n localTracks: this.localTracks,\n direction\n });\n }\n update(options) {\n var sdpNegotiationNeeded = false;\n if (this.updateRemoteQualityLevel(options.remoteQualityLevel)) {\n sdpNegotiationNeeded = true;\n }\n if (this.updateTransceivers(options)) {\n sdpNegotiationNeeded = true;\n }\n return sdpNegotiationNeeded;\n }\n getPeerConnectionState() {\n return this.pc.connectionState;\n }\n getIceConnectionState() {\n return this.pc.iceConnectionState;\n }\n getConnectionState() {\n var mediaConnectionState = this.evaluateMediaConnectionState();\n this.log('getConnectionState()', \"called, returning \".concat(mediaConnectionState));\n return mediaConnectionState;\n }\n getIceGatheringState() {\n return this.pc.iceGatheringState;\n }\n getStats() {\n return this.pc.getStats();\n }\n getTransceiverStats() {\n var _this = this;\n return _asyncToGenerator(function* () {\n var result = {\n audio: {\n senders: [],\n receivers: []\n },\n video: {\n senders: [],\n receivers: []\n },\n screenShareAudio: {\n senders: [],\n receivers: []\n },\n screenShareVideo: {\n senders: [],\n receivers: []\n }\n };\n var _loop = function* _loop(type) {\n var transceiver = _this.transceivers[type];\n if (transceiver) {\n yield transceiver.sender.getStats().then(statsReport => {\n var _transceiver$sender, _transceiver$sender$t;\n result[type].senders.push({\n report: statsReport,\n currentDirection: transceiver.currentDirection,\n localTrackLabel: (_transceiver$sender = transceiver.sender) === null || _transceiver$sender === void 0 ? void 0 : (_transceiver$sender$t = _transceiver$sender.track) === null || _transceiver$sender$t === void 0 ? void 0 : _transceiver$sender$t.label\n });\n });\n yield transceiver.receiver.getStats().then(statsReport => {\n var _transceiver$sender2, _transceiver$sender2$;\n result[type].receivers.push({\n report: statsReport,\n currentDirection: transceiver.currentDirection,\n localTrackLabel: (_transceiver$sender2 = transceiver.sender) === null || _transceiver$sender2 === void 0 ? void 0 : (_transceiver$sender2$ = _transceiver$sender2.track) === null || _transceiver$sender2$ === void 0 ? void 0 : _transceiver$sender2$.label\n });\n });\n }\n };\n for (var {\n type\n } of localTrackTypes) {\n yield* _loop(type);\n }\n return result;\n })();\n }\n insertDTMF(tones, duration, interToneGap) {\n if (!this.transceivers.audio) {\n throw new Error('audio transceiver missing');\n }\n if (!this.transceivers.audio.sender) {\n throw new Error('this.transceivers.audio.sender is null');\n }\n if (!this.transceivers.audio.sender.dtmf) {\n throw new Error('this.transceivers.audio.sender.dtmf is null');\n }\n this.transceivers.audio.sender.dtmf.insertDTMF(tones.toUpperCase(), duration, interToneGap);\n }\n setupTransceiverListeners() {\n var _this$transceivers$au, _this$transceivers$au2;\n if ((_this$transceivers$au = this.transceivers.audio) !== null && _this$transceivers$au !== void 0 && (_this$transceivers$au2 = _this$transceivers$au.sender) !== null && _this$transceivers$au2 !== void 0 && _this$transceivers$au2.dtmf) {\n this.transceivers.audio.sender.dtmf.ontonechange = this.onToneChange.bind(this);\n }\n }\n onToneChange(event) {\n this.log('onToneChange()', \"emitting Event.DTMF_TONE_CHANGED with tone=\\\"\".concat(event.tone, \"\\\"\"));\n this.emit(MediaConnectionEventNames.DTMF_TONE_CHANGED, {\n tone: event.tone\n });\n }\n identifyTransceivers() {\n if (!this.transceivers.audio && !this.transceivers.video && !this.transceivers.screenShareVideo) {\n var transceivers = this.pc.getTransceivers();\n this.log('identifyTransceivers()', \"transceivers.length=\".concat(transceivers.length));\n transceivers.forEach((transceiver, idx) => {\n this.log('identifyTransceivers()', \"transceiver[\".concat(idx, \"].mid=\").concat(transceiver.mid));\n });\n [this.transceivers.audio, this.transceivers.video, this.transceivers.screenShareVideo] = transceivers;\n this.setupTransceiverListeners();\n }\n }\n onTrack(event) {\n var _event$transceiver, _this$transceivers$au3, _this$transceivers$au4, _this$transceivers$au5, _this$transceivers$vi, _this$transceivers$vi2, _this$transceivers$vi3, _this$transceivers$sc, _this$transceivers$sc2, _this$transceivers$sc3;\n this.log('onTrack()', \"callback called: event=\".concat(JSON.stringify(event)));\n var MEDIA_ID = {\n AUDIO_TRACK: '0',\n VIDEO_TRACK: '1',\n SHARE_TRACK: '2'\n };\n var {\n track\n } = event;\n var trackMediaID = null;\n this.identifyTransceivers();\n if ((_event$transceiver = event.transceiver) !== null && _event$transceiver !== void 0 && _event$transceiver.mid) {\n this.log('onTrack()', 'identifying track by event.transceiver.mid');\n trackMediaID = event.transceiver.mid;\n } else if (track.id === ((_this$transceivers$au3 = this.transceivers.audio) === null || _this$transceivers$au3 === void 0 ? void 0 : (_this$transceivers$au4 = _this$transceivers$au3.receiver) === null || _this$transceivers$au4 === void 0 ? void 0 : (_this$transceivers$au5 = _this$transceivers$au4.track) === null || _this$transceivers$au5 === void 0 ? void 0 : _this$transceivers$au5.id)) {\n trackMediaID = MEDIA_ID.AUDIO_TRACK;\n } else if (track.id === ((_this$transceivers$vi = this.transceivers.video) === null || _this$transceivers$vi === void 0 ? void 0 : (_this$transceivers$vi2 = _this$transceivers$vi.receiver) === null || _this$transceivers$vi2 === void 0 ? void 0 : (_this$transceivers$vi3 = _this$transceivers$vi2.track) === null || _this$transceivers$vi3 === void 0 ? void 0 : _this$transceivers$vi3.id)) {\n trackMediaID = MEDIA_ID.VIDEO_TRACK;\n } else if (track.id === ((_this$transceivers$sc = this.transceivers.screenShareVideo) === null || _this$transceivers$sc === void 0 ? void 0 : (_this$transceivers$sc2 = _this$transceivers$sc.receiver) === null || _this$transceivers$sc2 === void 0 ? void 0 : (_this$transceivers$sc3 = _this$transceivers$sc2.track) === null || _this$transceivers$sc3 === void 0 ? void 0 : _this$transceivers$sc3.id)) {\n trackMediaID = MEDIA_ID.SHARE_TRACK;\n } else {\n trackMediaID = null;\n }\n this.log('onTrack()', \"trackMediaID=\".concat(trackMediaID));\n switch (trackMediaID) {\n case MEDIA_ID.AUDIO_TRACK:\n this.log('onTrack()', 'emitting Event.REMOTE_TRACK_ADDED with type=AUDIO');\n this.emit(MediaConnectionEventNames.REMOTE_TRACK_ADDED, {\n type: RemoteTrackType.AUDIO,\n track\n });\n break;\n case MEDIA_ID.VIDEO_TRACK:\n this.log('onTrack()', 'emitting Event.REMOTE_TRACK_ADDED with type=VIDEO');\n this.emit(MediaConnectionEventNames.REMOTE_TRACK_ADDED, {\n type: RemoteTrackType.VIDEO,\n track\n });\n break;\n case MEDIA_ID.SHARE_TRACK:\n this.log('onTrack()', 'emitting Event.REMOTE_TRACK_ADDED with type=SCREENSHARE_VIDEO');\n this.emit(MediaConnectionEventNames.REMOTE_TRACK_ADDED, {\n type: RemoteTrackType.SCREENSHARE_VIDEO,\n track\n });\n break;\n default:\n {\n this.error('onTrack()', \"failed to match remote track media id: \".concat(trackMediaID));\n }\n }\n }\n addLocalTracks() {\n this.log('addLocalTracks()', \"adding tracks \".concat(JSON.stringify(this.localTracks)));\n if (this.localTracks.audio) {\n this.pc.addTrack(this.localTracks.audio);\n }\n if (this.localTracks.video) {\n this.pc.addTrack(this.localTracks.video);\n }\n if (this.localTracks.screenShareVideo) {\n this.pc.addTrack(this.localTracks.screenShareVideo);\n }\n }\n onPeerConnectionStateChange() {\n this.log('onPeerConnectionStateChange()', \"callback called: peerConnectionState=\".concat(this.pc.connectionState));\n this.emit(MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED, {\n state: this.pc.connectionState\n });\n }\n onIceConnectionStateChange() {\n this.log('onIceConnectionStateChange()', \"callback called: iceConnectionState=\".concat(this.pc.iceConnectionState));\n this.emit(MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED, {\n state: this.pc.iceConnectionState\n });\n }\n evaluateMediaConnectionState() {\n var rtcPcConnectionState = this.pc.connectionState;\n var iceState = this.pc.iceConnectionState;\n var connectionStates = [rtcPcConnectionState, iceState];\n var mediaConnectionState;\n if (connectionStates.some(value => value === 'closed')) {\n mediaConnectionState = ConnectionState.Closed;\n } else if (connectionStates.some(value => value === 'failed')) {\n mediaConnectionState = ConnectionState.Failed;\n } else if (connectionStates.some(value => value === 'disconnected')) {\n mediaConnectionState = ConnectionState.Disconnected;\n } else if (connectionStates.every(value => value === 'connected' || value === 'completed')) {\n mediaConnectionState = ConnectionState.Connected;\n } else if (connectionStates.every(value => value === 'new')) {\n mediaConnectionState = ConnectionState.New;\n } else {\n mediaConnectionState = ConnectionState.Connecting;\n }\n this.log('evaluateConnectionState', \"iceConnectionState=\".concat(iceState, \" rtcPcConnectionState=\").concat(rtcPcConnectionState, \" => mediaConnectionState=\").concat(mediaConnectionState));\n return mediaConnectionState;\n }\n createSdpMungingConfig() {\n if (this.remoteQualityLevel) {\n var maxFsValues = {\n LOW: 1620,\n MEDIUM: 3600,\n HIGH: 8192\n };\n if (!maxFsValues[this.remoteQualityLevel]) {\n throw new Error(\"invalid value for receiveOptions.remoteQualityLevel: \".concat(this.remoteQualityLevel));\n }\n if (this.config.sdpMunging.h264MaxFs) {\n this.warn('createSdpMungingConfig', 'conflict: both config.sdpMunging.h264MaxFs and receiveOptions.remoteQualityLevel are set, remoteQualityLevel will override the config');\n }\n return _objectSpread$4(_objectSpread$4({}, this.config.sdpMunging), {}, {\n h264MaxFs: maxFsValues[this.remoteQualityLevel]\n });\n }\n return this.config.sdpMunging;\n }\n createLocalOffer() {\n var sdpMungingConfig = this.createSdpMungingConfig();\n return this.pc.createOffer().then(description => {\n this.log('createLocalOffer', 'local SDP offer created');\n var mungedDescription = {\n type: description.type,\n sdp: mungeLocalSdpForBrowser(sdpMungingConfig, (description === null || description === void 0 ? void 0 : description.sdp) || '')\n };\n return this.pc.setLocalDescription(mungedDescription);\n }).then(() => this.waitForIceCandidates()).then(() => {\n var _this$pc$localDescrip;\n var mungedSdp = mungeLocalSdp(sdpMungingConfig, ((_this$pc$localDescrip = this.pc.localDescription) === null || _this$pc$localDescrip === void 0 ? void 0 : _this$pc$localDescrip.sdp) || '');\n this.emit(MediaConnectionEventNames.LOCAL_SDP_OFFER_GENERATED);\n return {\n sdp: mungedSdp\n };\n }).catch(error => {\n if (error instanceof IceGatheringError || error instanceof SdpError) {\n throw error;\n } else {\n throw new SdpOfferCreationError(\"createLocalOffer() failure: \".concat(error.message), {\n cause: error\n });\n }\n });\n }\n handleRemoteOffer(sdp) {\n this.log('handleRemoteOffer', 'called');\n if (!sdp) {\n return Promise.reject(new SdpOfferHandlingError('SDP missing'));\n }\n var mungedRemoteSdp = mungeRemoteSdp(this.config.sdpMunging, sdp);\n var sdpMungingConfig = this.createSdpMungingConfig();\n return this.pc.setRemoteDescription(new window.RTCSessionDescription({\n type: 'offer',\n sdp: mungedRemoteSdp\n })).then(() => this.emit(MediaConnectionEventNames.REMOTE_SDP_OFFER_PROCESSED)).then(() => this.pc.createAnswer()).then(answer => {\n var mungedAnswer = {\n type: answer.type,\n sdp: mungeLocalSdpForBrowser(sdpMungingConfig, (answer === null || answer === void 0 ? void 0 : answer.sdp) || '')\n };\n return this.pc.setLocalDescription(mungedAnswer);\n }).then(() => this.waitForIceCandidates()).then(() => {\n var _this$pc$localDescrip2;\n var mungedLocalSdp = mungeLocalSdp(sdpMungingConfig, ((_this$pc$localDescrip2 = this.pc.localDescription) === null || _this$pc$localDescrip2 === void 0 ? void 0 : _this$pc$localDescrip2.sdp) || '');\n this.emit(MediaConnectionEventNames.LOCAL_SDP_ANSWER_GENERATED);\n return {\n sdp: mungedLocalSdp\n };\n }).catch(error => {\n if (error instanceof IceGatheringError || error instanceof SdpError) {\n throw error;\n } else {\n throw new SdpOfferHandlingError(\"handleRemoteOffer() failure: \".concat(error.message), {\n cause: error\n });\n }\n });\n }\n handleRemoteAnswer(sdp) {\n this.log('handleRemoteAnswer', 'called');\n if (!sdp) {\n return Promise.reject(new SdpAnswerHandlingError('SDP answer missing'));\n }\n var mungedRemoteSdp = mungeRemoteSdp(this.config.sdpMunging, sdp);\n return this.pc.setRemoteDescription(new window.RTCSessionDescription({\n type: 'answer',\n sdp: mungedRemoteSdp\n })).then(result => {\n this.emit(MediaConnectionEventNames.REMOTE_SDP_ANSWER_PROCESSED);\n return result;\n }).catch(error => {\n throw new SdpAnswerHandlingError(\"handleRemoteAnswer() failure: \".concat(error.message), {\n cause: error\n });\n });\n }\n waitForIceCandidates() {\n return new Promise((resolve, reject) => {\n var startTime = performance.now();\n var done = false;\n var timeoutId;\n var runSdpCheckForErrors = () => {\n var _this$pc$localDescrip3;\n return checkSdpForErrors({\n allowPort0: !!this.config.sdpMunging.convertPort9to0,\n requireH264: !!this.config.requireH264\n }, (_this$pc$localDescrip3 = this.pc.localDescription) === null || _this$pc$localDescrip3 === void 0 ? void 0 : _this$pc$localDescrip3.sdp);\n };\n var doneGatheringIceCandidates = () => {\n if (!done) {\n var milliseconds = performance.now() - startTime;\n this.log('waitForIceCandidates()', \"checking SDP...\");\n var sdpError = runSdpCheckForErrors();\n if (sdpError) {\n var _this$pc$localDescrip4;\n this.error('waitForIceCandidates()', \"SDP not valid after waiting: \\\"\".concat(sdpError.message, \"\\\", sdp=\").concat((_this$pc$localDescrip4 = this.pc.localDescription) === null || _this$pc$localDescrip4 === void 0 ? void 0 : _this$pc$localDescrip4.sdp));\n reject(sdpError);\n }\n this.log('waitForIceCandidates()', \"It took \".concat(milliseconds, \" milliseconds to gather ice candidates\"));\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n done = true;\n this.pc.onicegatheringstatechange = null;\n this.pc.onicecandidate = null;\n this.pc.onicecandidateerror = null;\n resolve();\n }\n };\n if (this.pc.iceGatheringState === 'complete' && runSdpCheckForErrors() === false) {\n this.log('waitForIceCandidates()', 'iceGatheringState is already \"complete\" and local SDP is valid');\n resolve();\n return;\n }\n this.log('waitForIceCandidates()', 'waiting for ICE candidates to be gathered...');\n if (this.config.iceCandidatesTimeout) {\n timeoutId = setTimeout(() => {\n if (!done) {\n this.log('waitForIceCandidates()', \"timeout of \".concat(this.config.iceCandidatesTimeout, \" milliseconds reached\"));\n doneGatheringIceCandidates();\n }\n }, this.config.iceCandidatesTimeout);\n }\n this.pc.onicegatheringstatechange = () => {\n this.log('waitForIceCandidates()', \"iceGatheringState changed to \".concat(this.pc.iceGatheringState));\n this.emit(MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED, {\n state: this.pc.iceGatheringState\n });\n if (this.pc.iceGatheringState === 'complete') {\n doneGatheringIceCandidates();\n }\n };\n this.pc.onicecandidate = evt => {\n if (evt.candidate === null) {\n this.log('waitForIceCandidates()', 'evt.candidate === null received');\n doneGatheringIceCandidates();\n } else {\n var _evt$candidate, _evt$candidate2;\n this.log('waitForIceCandidates()', \"ICE Candidate(\".concat((_evt$candidate = evt.candidate) === null || _evt$candidate === void 0 ? void 0 : _evt$candidate.sdpMLineIndex, \"): \").concat((_evt$candidate2 = evt.candidate) === null || _evt$candidate2 === void 0 ? void 0 : _evt$candidate2.candidate));\n }\n };\n this.pc.onicecandidateerror = evt => {\n var event = evt;\n this.warn('waitForIceCandidates()', \"onicecandidateerror: address=\".concat(event.address, \" errorCode=\").concat(event.errorCode, \", errorText=\").concat(event.errorText, \", url=\").concat(event.url));\n };\n });\n }\n forceRtcMetricsCallback() {\n var _this$forceStatsRepor;\n (_this$forceStatsRepor = this.forceStatsReport) === null || _this$forceStatsRepor === void 0 ? void 0 : _this$forceStatsRepor.call(this);\n }\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nvar logDisabled_ = true;\nvar deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nfunction extractVersion(uastring, expr, pos) {\n var match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nfunction wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n var proto = window.RTCPeerConnection.prototype;\n var nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function (nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n var wrappedCallback = e => {\n var modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]);\n };\n var nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function (nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n var unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]);\n };\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get() {\n return this['_on' + eventNameToWrap];\n },\n set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\nfunction disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool + '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nfunction disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool + '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\nfunction log$1() {\n if (typeof window === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nfunction deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nfunction detectBrowser(window) {\n // Returned result object.\n var result = {\n browser: null,\n version: null\n };\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator) {\n result.browser = 'Not a browser.';\n return result;\n }\n var {\n navigator\n } = window;\n if (navigator.mozGetUserMedia) {\n // Firefox.\n result.browser = 'firefox';\n result.version = extractVersion(navigator.userAgent, /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = extractVersion(navigator.userAgent, /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) {\n // Safari.\n result.browser = 'safari';\n result.version = extractVersion(navigator.userAgent, /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype;\n } else {\n // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nfunction compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n return Object.keys(data).reduce(function (accumulator, key) {\n var isObj = isObject(data[key]);\n var value = isObj ? compactObject(data[key]) : data[key];\n var isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, {\n [key]: value\n });\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nfunction walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(name => {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(id => {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nfunction filterStats(result, track, outbound) {\n var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n var filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n var trackStats = [];\n result.forEach(value => {\n if (value.type === 'track' && value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(trackStat => {\n result.forEach(stats => {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nvar logging = log$1;\nfunction shimGetUserMedia$2(window, browserDetails) {\n var navigator = window && window.navigator;\n if (!navigator.mediaDevices) {\n return;\n }\n var constraintsToChrome_ = function constraintsToChrome_(c) {\n if (typeof c !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n var cc = {};\n Object.keys(c).forEach(key => {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n var r = typeof c[key] === 'object' ? c[key] : {\n ideal: c[key]\n };\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n var oldname_ = function oldname_(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return name === 'deviceId' ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n var oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(mix => {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n var shimConstraints_ = function shimConstraints_(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === 'object') {\n var remap = function remap(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === 'object') {\n // Shim facingMode for mobile & surface pro.\n var face = constraints.video.facingMode;\n face = face && (typeof face === 'object' ? face : {\n ideal: face\n });\n var getSupportedFacingModeLies = browserDetails.version < 66;\n if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n var matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices().then(devices => {\n devices = devices.filter(d => d.kind === 'videoinput');\n var dev = devices.find(d => matches.some(match => d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n\n if (dev) {\n constraints.video.deviceId = face.exact ? {\n exact: dev.deviceId\n } : {\n ideal: dev.deviceId\n };\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n var shimError_ = function shimError_(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n var getUserMedia_ = function getUserMedia_(constraints, onSuccess, onError) {\n shimConstraints_(constraints, c => {\n navigator.webkitGetUserMedia(c, onSuccess, e => {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n var origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function (cs) {\n return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, e => Promise.reject(shimError_(e))));\n };\n }\n}\n\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimGetDisplayMedia$1(window, getSourceId) {\n if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!window.navigator.mediaDevices) {\n return;\n }\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== 'function') {\n console.error('shimGetDisplayMedia: getSourceId argument is not ' + 'a function');\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n return getSourceId(constraints).then(sourceId => {\n var widthSpecified = constraints.video && constraints.video.width;\n var heightSpecified = constraints.video && constraints.video.height;\n var frameRateSpecified = constraints.video && constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) {\n constraints.video.mandatory.maxWidth = widthSpecified;\n }\n if (heightSpecified) {\n constraints.video.mandatory.maxHeight = heightSpecified;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nfunction shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\nfunction shimOnTrack$1(window) {\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get() {\n return this._ontrack;\n },\n set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = e => {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', te => {\n var receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers().find(r => r.track && r.track.id === te.track.id);\n } else {\n receiver = {\n track: te.track\n };\n }\n var event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {\n receiver\n };\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(track => {\n var receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers().find(r => r.track && r.track.id === track.id);\n } else {\n receiver = {\n track\n };\n }\n var event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {\n receiver\n };\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n wrapPeerConnectionEvent(window, 'track', e => {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver', {\n value: {\n receiver: e.receiver\n }\n });\n }\n return e;\n });\n }\n}\nfunction shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n var shimSenderWithDtmf = function shimSenderWithDtmf(pc, track) {\n return {\n track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n var sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n var idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n var sender = this._senders.find(s => s.track === track);\n if (sender) {\n // remove sender\n this._senders.splice(this._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (typeof window === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\nfunction shimGetStats(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n var origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n var [selector, onSucc, onErr] = arguments;\n\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === 'function') {\n return origGetStats.apply(this, arguments);\n }\n\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 || typeof selector !== 'function')) {\n return origGetStats.apply(this, []);\n }\n var fixChromeStats_ = function fixChromeStats_(response) {\n var standardReport = {};\n var reports = response.result();\n reports.forEach(report => {\n var standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[report.type] || report.type\n };\n report.names().forEach(name => {\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n return standardReport;\n };\n\n // shim getStats with maplike support\n var makeMapStats = function makeMapStats(stats) {\n return new Map(Object.keys(stats).map(key => [key, stats[key]]));\n };\n if (arguments.length >= 2) {\n var successCallbackWrapper_ = function successCallbackWrapper_(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n return origGetStats.apply(this, [successCallbackWrapper_, selector]);\n }\n\n // promise-support\n return new Promise((resolve, reject) => {\n origGetStats.apply(this, [function (response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n }, reject]);\n }).then(onSucc, onErr);\n };\n}\nfunction shimSenderReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n var sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n var sender = this;\n return this._pc.getStats().then(result =>\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n filterStats(result, sender.track, true));\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n var receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n var receiver = this;\n return this._pc.getStats().then(result => filterStats(result, receiver.track, false));\n };\n }\n if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n var origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) {\n var track = arguments[0];\n var sender;\n var receiver;\n var err;\n this.getSenders().forEach(s => {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(r => {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || sender && receiver) {\n return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\nfunction shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams).map(streamId => this._shimmedLocalStreams[streamId][0]);\n };\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n var sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n stream.getTracks().forEach(track => {\n var alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n });\n var existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n var newSenders = this.getSenders().filter(newSender => existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n var idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n this._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (this._shimmedLocalStreams[streamId].length === 1) {\n delete this._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\nfunction shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n var origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n var nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n };\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n stream.getTracks().forEach(track => {\n var alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n var newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n origRemoveStream.apply(this, [this._streams[stream.id] || stream]);\n delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id];\n delete this._streams[stream.id];\n };\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n if (this.signalingState === 'closed') {\n throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n }\n var streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 || !streams[0].getTracks().find(t => t === track)) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError');\n }\n var alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n var oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(() => {\n this.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n var newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(s => s.track === track);\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n var sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n var externalStream = pc._reverseStreams[internalId];\n var internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n var sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n var externalStream = pc._reverseStreams[internalId];\n var internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = {\n [method]() {\n var args = arguments;\n var isLegacyCall = arguments.length && typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [description => {\n var desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [desc]);\n }, err => {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]]);\n }\n return nativeMethod.apply(this, arguments).then(description => replaceInternalStreamId(this, description));\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n var origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n var origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', {\n get() {\n var description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n if (this.signalingState === 'closed') {\n throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n var isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n var stream;\n Object.keys(this._streams).forEach(streamid => {\n var hasTrack = this._streams[streamid].getTracks().find(track => sender.track === track);\n if (hasTrack) {\n stream = this._streams[streamid];\n }\n });\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\nfunction shimPeerConnection$1(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = {\n [method]() {\n arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nfunction fixNegotiationNeeded(window, browserDetails) {\n wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n var pc = e.target;\n if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n\nvar chromeShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimMediaStream: shimMediaStream,\n shimOnTrack: shimOnTrack$1,\n shimGetSendersWithDtmf: shimGetSendersWithDtmf,\n shimGetStats: shimGetStats,\n shimSenderReceiverGetStats: shimSenderReceiverGetStats,\n shimAddTrackRemoveTrackWithNative: shimAddTrackRemoveTrackWithNative,\n shimAddTrackRemoveTrack: shimAddTrackRemoveTrack,\n shimPeerConnection: shimPeerConnection$1,\n fixNegotiationNeeded: fixNegotiationNeeded,\n shimGetUserMedia: shimGetUserMedia$2,\n shimGetDisplayMedia: shimGetDisplayMedia$1\n});\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nfunction shimGetUserMedia$1(window, browserDetails) {\n var navigator = window && window.navigator;\n var MediaStreamTrack = window && window.MediaStreamTrack;\n navigator.getUserMedia = function (constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n var remap = function remap(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n var nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function (c) {\n if (typeof c === 'object' && typeof c.audio === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n var nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function () {\n var obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n var nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function (c) {\n if (this.kind === 'audio' && typeof c === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\nfunction shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!window.navigator.mediaDevices) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n var err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {\n mediaSource: preferredMediaSource\n };\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nfunction shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {\n receiver: this.receiver\n };\n }\n });\n }\n}\nfunction shimPeerConnection(window, browserDetails) {\n if (typeof window !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = {\n [method]() {\n arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }\n };\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n var modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n var nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n var [selector, onSucc, onErr] = arguments;\n return nativeGetStats.apply(this, [selector || null]).then(stats => {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(stat => {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i) => {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n }).then(onSucc, onErr);\n };\n}\nfunction shimSenderGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n var sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map());\n };\n}\nfunction shimReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n var receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\nfunction shimRemoveStream(window) {\n if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(sender => {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n}\nfunction shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\nfunction shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() {\n this.setParametersPromises = [];\n // WebIDL input coercion and validation\n var sendEncodings = arguments[1] && arguments[1].sendEncodings;\n if (sendEncodings === undefined) {\n sendEncodings = [];\n }\n sendEncodings = [...sendEncodings];\n var shouldPerformCheck = sendEncodings.length > 0;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n sendEncodings.forEach(encodingParam => {\n if ('rid' in encodingParam) {\n var ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n var transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n var {\n sender\n } = transceiver;\n var params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) {\n params.encodings = sendEncodings;\n sender.sendEncodings = sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params).then(() => {\n delete sender.sendEncodings;\n }).catch(() => {\n delete sender.sendEncodings;\n }));\n }\n }\n return transceiver;\n };\n }\n}\nfunction shimGetParameters(window) {\n if (!(typeof window === 'object' && window.RTCRtpSender)) {\n return;\n }\n var origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters = function getParameters() {\n var params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\nfunction shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises).then(() => {\n return origCreateOffer.apply(this, arguments);\n }).finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\nfunction shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises).then(() => {\n return origCreateAnswer.apply(this, arguments);\n }).finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n\nvar firefoxShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimOnTrack: shimOnTrack,\n shimPeerConnection: shimPeerConnection,\n shimSenderGetStats: shimSenderGetStats,\n shimReceiverGetStats: shimReceiverGetStats,\n shimRemoveStream: shimRemoveStream,\n shimRTCDataChannel: shimRTCDataChannel,\n shimAddTransceiver: shimAddTransceiver,\n shimGetParameters: shimGetParameters,\n shimCreateOffer: shimCreateOffer,\n shimCreateAnswer: shimCreateAnswer,\n shimGetUserMedia: shimGetUserMedia$1,\n shimGetDisplayMedia: shimGetDisplayMedia\n});\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nfunction shimLocalStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n var _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(track => _addTrack.call(this, track, stream));\n stream.getVideoTracks().forEach(track => _addTrack.call(this, track, stream));\n };\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track) {\n for (var _len = arguments.length, streams = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n streams[_key - 1] = arguments[_key];\n }\n if (streams) {\n streams.forEach(stream => {\n if (!this._localStreams) {\n this._localStreams = [stream];\n } else if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n var index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n var tracks = stream.getTracks();\n this.getSenders().forEach(sender => {\n if (tracks.includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n }\n}\nfunction shimRemoteStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get() {\n return this._onaddstream;\n },\n set(f) {\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = e => {\n e.streams.forEach(stream => {\n if (!this._remoteStreams) {\n this._remoteStreams = [];\n }\n if (this._remoteStreams.includes(stream)) {\n return;\n }\n this._remoteStreams.push(stream);\n var event = new Event('addstream');\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n var pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function (e) {\n e.streams.forEach(stream => {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n var event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\nfunction shimCallbacksAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n var prototype = window.RTCPeerConnection.prototype;\n var origCreateOffer = prototype.createOffer;\n var origCreateAnswer = prototype.createAnswer;\n var setLocalDescription = prototype.setLocalDescription;\n var setRemoteDescription = prototype.setRemoteDescription;\n var addIceCandidate = prototype.addIceCandidate;\n prototype.createOffer = function createOffer(successCallback, failureCallback) {\n var options = arguments.length >= 2 ? arguments[2] : arguments[0];\n var promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.createAnswer = function createAnswer(successCallback, failureCallback) {\n var options = arguments.length >= 2 ? arguments[2] : arguments[0];\n var promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n var withCallback = function withCallback(description, successCallback, failureCallback) {\n var promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n withCallback = function withCallback(description, successCallback, failureCallback) {\n var promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n withCallback = function withCallback(candidate, successCallback, failureCallback) {\n var promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\nfunction shimGetUserMedia(window) {\n var navigator = window && window.navigator;\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n var mediaDevices = navigator.mediaDevices;\n var _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = constraints => {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb);\n }.bind(navigator);\n }\n}\nfunction shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({}, constraints, {\n video: compactObject(constraints.video)\n });\n }\n return constraints;\n}\nfunction shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n var OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n var newIceServers = [];\n for (var i = 0; i < pcConfig.iceServers.length; i++) {\n var server = pcConfig.iceServers[i];\n if (!server.hasOwnProperty('urls') && server.hasOwnProperty('url')) {\n deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\nfunction shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {\n receiver: this.receiver\n };\n }\n });\n }\n}\nfunction shimCreateOfferLegacy(window) {\n var origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio;\n }\n var audioTransceiver = this.getTransceivers().find(transceiver => transceiver.receiver.track.kind === 'audio');\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) {\n this.addTransceiver('audio', {\n direction: 'recvonly'\n });\n }\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo;\n }\n var videoTransceiver = this.getTransceivers().find(transceiver => transceiver.receiver.track.kind === 'video');\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) {\n this.addTransceiver('video', {\n direction: 'recvonly'\n });\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\nfunction shimAudioContext(window) {\n if (typeof window !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n\nvar safariShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimLocalStreamsAPI: shimLocalStreamsAPI,\n shimRemoteStreamsAPI: shimRemoteStreamsAPI,\n shimCallbacksAPI: shimCallbacksAPI,\n shimGetUserMedia: shimGetUserMedia,\n shimConstraints: shimConstraints,\n shimRTCIceServerUrls: shimRTCIceServerUrls,\n shimTrackEventTransceiver: shimTrackEventTransceiver,\n shimCreateOfferLegacy: shimCreateOfferLegacy,\n shimAudioContext: shimAudioContext\n});\n\nvar sdp$1 = {exports: {}};\n\n/* eslint-env node */\n(function (module) {\n\n // SDP helpers.\n var SDPUtils = {};\n\n // Generate an alphanumeric identifier for cname or mids.\n // TODO: use UUIDs instead? https://gist.github.com/jed/982883\n SDPUtils.generateIdentifier = function () {\n return Math.random().toString(36).substr(2, 10);\n };\n\n // The RTCP CNAME used by all peerconnections from the same JS.\n SDPUtils.localCName = SDPUtils.generateIdentifier();\n\n // Splits SDP into lines, dealing with both CRLF and LF.\n SDPUtils.splitLines = function (blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n };\n // Splits SDP into sessionpart and mediasections. Ensures CRLF.\n SDPUtils.splitSections = function (blob) {\n var parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ? 'm=' + part : part).trim() + '\\r\\n');\n };\n\n // Returns the session description.\n SDPUtils.getDescription = function (blob) {\n var sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n };\n\n // Returns the individual media sections.\n SDPUtils.getMediaSections = function (blob) {\n var sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n };\n\n // Returns lines that start with a certain prefix.\n SDPUtils.matchPrefix = function (blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n };\n\n // Parses an ICE candidate line. Sample input:\n // candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n // rport 55996\"\n // Input can be prefixed with a=.\n SDPUtils.parseCandidate = function (line) {\n var parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n var candidate = {\n foundation: parts[0],\n component: {\n 1: 'rtp',\n 2: 'rtcp'\n }[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4],\n // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7]\n };\n for (var i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default:\n // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n };\n\n // Translates a candidate object into SDP candidate attribute.\n // This does not include the a= prefix!\n SDPUtils.writeCandidate = function (candidate) {\n var sdp = [];\n sdp.push(candidate.foundation);\n var component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n var type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress && candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n };\n\n // Parses an ice-options line, returns an array of option tags.\n // Sample input:\n // a=ice-options:foo bar\n SDPUtils.parseIceOptions = function (line) {\n return line.substr(14).split(' ');\n };\n\n // Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n // a=rtpmap:111 opus/48000/2\n SDPUtils.parseRtpMap = function (line) {\n var parts = line.substr(9).split(' ');\n var parsed = {\n payloadType: parseInt(parts.shift(), 10) // was: id\n };\n\n parts = parts[0].split('/');\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n };\n\n // Generates a rtpmap line from RTCRtpCodecCapability or\n // RTCRtpCodecParameters.\n SDPUtils.writeRtpMap = function (codec) {\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n var channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n };\n\n // Parses a extmap line (headerextension from RFC 5285). Sample input:\n // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n // a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\n SDPUtils.parseExtmap = function (line) {\n var parts = line.substr(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1]\n };\n };\n\n // Generates an extmap line from RTCRtpHeaderExtensionParameters or\n // RTCRtpHeaderExtension.\n SDPUtils.writeExtmap = function (headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + '\\r\\n';\n };\n\n // Parses a fmtp line, returns dictionary. Sample input:\n // a=fmtp:96 vbr=on;cng=on\n // Also deals with vbr=on; cng=on\n SDPUtils.parseFmtp = function (line) {\n var parsed = {};\n var kv;\n var parts = line.substr(line.indexOf(' ') + 1).split(';');\n for (var j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n };\n\n // Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\n SDPUtils.writeFmtp = function (codec) {\n var line = '';\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n var params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n };\n\n // Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n // a=rtcp-fb:98 nack rpsi\n SDPUtils.parseRtcpFb = function (line) {\n var parts = line.substr(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' ')\n };\n };\n\n // Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\n SDPUtils.writeRtcpFb = function (codec) {\n var lines = '';\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\\r\\n';\n });\n }\n return lines;\n };\n\n // Parses a RFC 5576 ssrc media attribute. Sample input:\n // a=ssrc:3735928559 cname:something\n SDPUtils.parseSsrcMedia = function (line) {\n var sp = line.indexOf(' ');\n var parts = {\n ssrc: parseInt(line.substr(7, sp - 7), 10)\n };\n var colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substr(sp + 1, colon - sp - 1);\n parts.value = line.substr(colon + 1);\n } else {\n parts.attribute = line.substr(sp + 1);\n }\n return parts;\n };\n\n // Parse a ssrc-group line (see RFC 5576). Sample input:\n // a=ssrc-group:semantics 12 34\n SDPUtils.parseSsrcGroup = function (line) {\n var parts = line.substr(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10))\n };\n };\n\n // Extracts the MID (RFC 5888) from a media section.\n // Returns the MID or undefined if no mid line was found.\n SDPUtils.getMid = function (mediaSection) {\n var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substr(6);\n }\n };\n\n // Parses a fingerprint line for DTLS-SRTP.\n SDPUtils.parseFingerprint = function (line) {\n var parts = line.substr(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(),\n // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase() // the definition is upper-case in RFC 4572.\n };\n };\n\n // Extracts DTLS parameters from SDP media section or sessionpart.\n // FIXME: for consistency with other functions this should only\n // get the fingerprint line as input. See also getIceParameters.\n SDPUtils.getDtlsParameters = function (mediaSection, sessionpart) {\n var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint)\n };\n };\n\n // Serializes DTLS parameters to SDP.\n SDPUtils.writeDtlsParameters = function (params, setupType) {\n var sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n };\n\n // Parses a=crypto lines into\n // https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\n SDPUtils.parseCryptoLine = function (line) {\n var parts = line.substr(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3)\n };\n };\n SDPUtils.writeCryptoLine = function (parameters) {\n return 'a=crypto:' + parameters.tag + ' ' + parameters.cryptoSuite + ' ' + (typeof parameters.keyParams === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\\r\\n';\n };\n\n // Parses the crypto key parameters into\n // https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\n SDPUtils.parseCryptoKeyParams = function (keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n var parts = keyParams.substr(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined\n };\n };\n SDPUtils.writeCryptoKeyParams = function (keyParams) {\n return keyParams.keyMethod + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : '');\n };\n\n // Extracts all SDES parameters.\n SDPUtils.getCryptoParameters = function (mediaSection, sessionpart) {\n var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n };\n\n // Parses ICE information from SDP media section or sessionpart.\n // FIXME: for consistency with other functions this should only\n // get the ice-ufrag and ice-pwd lines as input.\n SDPUtils.getIceParameters = function (mediaSection, sessionpart) {\n var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0];\n var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substr(12),\n password: pwd.substr(10)\n };\n };\n\n // Serializes ICE parameters to SDP.\n SDPUtils.writeIceParameters = function (params) {\n var sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' + 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n };\n\n // Parses the SDP media section and returns RTCRtpParameters.\n SDPUtils.parseRtpParameters = function (mediaSection) {\n var description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: []\n };\n var lines = SDPUtils.splitLines(mediaSection);\n var mline = lines[0].split(' ');\n for (var i = 3; i < mline.length; i++) {\n // find all codecs from mline[3..]\n var pt = mline[i];\n var rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n var codec = SDPUtils.parseRtpMap(rtpmapline);\n var fmtps = SDPUtils.matchPrefix(mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp: is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:' + pt + ' ').map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n // FIXME: parse rtcp.\n return description;\n };\n\n // Generates parts of the SDP media section describing the capabilities /\n // parameters.\n SDPUtils.writeRtpDescription = function (kind, caps) {\n var sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' UDP/TLS/RTP/SAVPF ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n var maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n };\n\n // Parses the SDP media section and returns an array of\n // RTCRtpEncodingParameters.\n SDPUtils.parseRtpEncodingParameters = function (mediaSection) {\n var encodingParameters = [];\n var description = SDPUtils.parseRtpParameters(mediaSection);\n var hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(parts => parts.attribute === 'cname');\n var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n var secondarySsrc;\n var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(line => {\n var parts = line.substr(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n var encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10)\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {\n ssrc: secondarySsrc\n };\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red'\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substr(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95 - 50 * 40 * 8;\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n };\n\n // parses http://draft.ortc.org/#rtcrtcpparameters*\n SDPUtils.parseRtcpParameters = function (mediaSection) {\n var rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrÑ–bute.\n // Note that Edge does not support unmuxed RTCP.\n var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n return rtcpParameters;\n };\n SDPUtils.writeRtcpParameters = function (rtcpParameters) {\n var sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n };\n\n // parses either a=msid: or a=ssrc:... msid lines and returns\n // the id of the MediaStream and MediaStreamTrack.\n SDPUtils.parseMsid = function (mediaSection) {\n var parts;\n var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substr(7).split(' ');\n return {\n stream: parts[0],\n track: parts[1]\n };\n }\n var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {\n stream: parts[0],\n track: parts[1]\n };\n }\n };\n\n // SCTP\n // parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n // to draft-ietf-mmusic-sctp-sdp-05\n SDPUtils.parseSctpDescription = function (mediaSection) {\n var mline = SDPUtils.parseMLine(mediaSection);\n var maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n var maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n var sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substr(12), 10),\n protocol: mline.fmt,\n maxMessageSize\n };\n }\n var sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n var parts = sctpMapLines[0].substr(10).split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize\n };\n }\n };\n\n // SCTP\n // outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n // support by now receiving in this format, unless we originally parsed\n // as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n // protocol of DTLS/SCTP -- without UDP/ or TCP/)\n SDPUtils.writeSctpDescription = function (media, sctp) {\n var output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctp-port:' + sctp.port + '\\r\\n'];\n } else {\n output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n'];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n };\n\n // Generate a session ID for SDP.\n // https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n // recommends using a cryptographically random +ve 64-bit value\n // but right now this should be acceptable and within the right range\n SDPUtils.generateSessionId = function () {\n return Math.random().toString().substr(2, 21);\n };\n\n // Write boiler plate for start of SDP\n // sessId argument is optional - if not supplied it will\n // be generated randomly\n // sessVersion is optional and defaults to 2\n // sessUser is optional and defaults to 'thisisadapterortc'\n SDPUtils.writeSessionBoilerplate = function (sessId, sessVer, sessUser) {\n var sessionId;\n var version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n var user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\\r\\n' + 's=-\\r\\n' + 't=0 0\\r\\n';\n };\n\n // Gets the direction from the mediaSection or the sessionpart.\n SDPUtils.getDirection = function (mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n var lines = SDPUtils.splitLines(mediaSection);\n for (var i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substr(2);\n // FIXME: What should happen here?\n }\n }\n\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n };\n SDPUtils.getKind = function (mediaSection) {\n var lines = SDPUtils.splitLines(mediaSection);\n var mline = lines[0].split(' ');\n return mline[0].substr(2);\n };\n SDPUtils.isRejected = function (mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n };\n SDPUtils.parseMLine = function (mediaSection) {\n var lines = SDPUtils.splitLines(mediaSection);\n var parts = lines[0].substr(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' ')\n };\n };\n SDPUtils.parseOLine = function (mediaSection) {\n var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n var parts = line.substr(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5]\n };\n };\n\n // a very naive interpretation of a valid SDP.\n SDPUtils.isValidSDP = function (blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n var lines = SDPUtils.splitLines(blob);\n for (var i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n\n return true;\n };\n\n // Expose public methods.\n {\n module.exports = SDPUtils;\n }\n})(sdp$1);\nvar SDPUtils = sdp$1.exports;\n\nvar sdp = /*#__PURE__*/_mergeNamespaces({\n __proto__: null,\n 'default': SDPUtils\n}, [sdp$1.exports]);\n\n/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nfunction shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) {\n return;\n }\n var NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substr(2);\n }\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n var nativeCandidate = new NativeRTCIceCandidate(args);\n var parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n var augmentedCandidate = Object.assign(nativeCandidate, parsedCandidate);\n\n // Add a serializer that does not serialize the extra attributes.\n augmentedCandidate.toJSON = function toJSON() {\n return {\n candidate: augmentedCandidate.candidate,\n sdpMid: augmentedCandidate.sdpMid,\n sdpMLineIndex: augmentedCandidate.sdpMLineIndex,\n usernameFragment: augmentedCandidate.usernameFragment\n };\n };\n return augmentedCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\nfunction shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n var sctpInDescription = function sctpInDescription(description) {\n if (!description || !description.sdp) {\n return false;\n }\n var sections = SDPUtils.splitSections(description.sdp);\n sections.shift();\n return sections.some(mediaSection => {\n var mLine = SDPUtils.parseMLine(mediaSection);\n return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n var getRemoteFirefoxVersion = function getRemoteFirefoxVersion(description) {\n // TODO: Is there a better solution for detecting Firefox?\n var match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n var version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n var getCanSendMaxMessageSize = function getCanSendMaxMessageSize(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n var canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n var getMaxMessageSize = function getMaxMessageSize(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n var maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox' && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n var match = SDPUtils.matchPrefix(description.sdp, 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substr(19), 10);\n } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n var {\n sdpSemantics\n } = this.getConfiguration();\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true\n });\n }\n }\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n var isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n var canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n var remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n var maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n var sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\nfunction shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n var origDataChannelSend = dc.send;\n dc.send = function send() {\n var data = arguments[0];\n var length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n var origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() {\n var dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n wrapPeerConnectionEvent(window, 'datachannel', e => {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nfunction shimConnectionState(window) {\n if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n var proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get() {\n return this._onconnectionstatechange || null;\n },\n set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange', this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n ['setLocalDescription', 'setRemoteDescription'].forEach(method => {\n var origMethod = proto[method];\n proto[method] = function () {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = e => {\n var pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n var newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\nfunction removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {\n return;\n }\n var nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n var sdp = desc.sdp.split('\\n').filter(line => {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\nfunction shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n var nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nfunction shimParameterlessSetLocalDescription(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n var nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n var desc = arguments[0] || {};\n if (typeof desc !== 'object' || desc.type && desc.sdp) {\n return nativeSetLocalDescription.apply(this, arguments);\n }\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {\n type: desc.type,\n sdp: desc.sdp\n };\n if (!desc.type) {\n switch (this.signalingState) {\n case 'stable':\n case 'have-local-offer':\n case 'have-remote-pranswer':\n desc.type = 'offer';\n break;\n default:\n desc.type = 'answer';\n break;\n }\n }\n if (desc.sdp || desc.type !== 'offer' && desc.type !== 'answer') {\n return nativeSetLocalDescription.apply(this, [desc]);\n }\n var func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n return func.apply(this).then(d => nativeSetLocalDescription.apply(this, [d]));\n };\n}\n\nvar commonShim = /*#__PURE__*/Object.freeze({\n __proto__: null,\n shimRTCIceCandidate: shimRTCIceCandidate,\n shimMaxMessageSize: shimMaxMessageSize,\n shimSendThrowTypeError: shimSendThrowTypeError,\n shimConnectionState: shimConnectionState,\n removeExtmapAllowMixed: removeExtmapAllowMixed,\n shimAddIceCandidateNullOrEmpty: shimAddIceCandidateNullOrEmpty,\n shimParameterlessSetLocalDescription: shimParameterlessSetLocalDescription\n});\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\n// Shimming starts here.\nfunction adapterFactory() {\n var {\n window\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true\n };\n // Utils.\n var logging = log$1;\n var browserDetails = detectBrowser(window);\n var adapter = {\n browserDetails,\n commonShim,\n extractVersion: extractVersion,\n disableLog: disableLog,\n disableWarnings: disableWarnings,\n // Expose sdp as a convenience. For production apps include directly.\n sdp\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !shimPeerConnection$1 || !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n shimGetUserMedia$2(window, browserDetails);\n shimMediaStream(window);\n shimPeerConnection$1(window, browserDetails);\n shimOnTrack$1(window);\n shimAddTrackRemoveTrack(window, browserDetails);\n shimGetSendersWithDtmf(window);\n shimGetStats(window);\n shimSenderReceiverGetStats(window);\n fixNegotiationNeeded(window, browserDetails);\n shimRTCIceCandidate(window);\n shimConnectionState(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window);\n removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !shimPeerConnection || !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n shimGetUserMedia$1(window, browserDetails);\n shimPeerConnection(window, browserDetails);\n shimOnTrack(window);\n shimRemoveStream(window);\n shimSenderGetStats(window);\n shimReceiverGetStats(window);\n shimRTCDataChannel(window);\n shimAddTransceiver(window);\n shimGetParameters(window);\n shimCreateOffer(window);\n shimCreateAnswer(window);\n shimRTCIceCandidate(window);\n shimConnectionState(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n shimAddIceCandidateNullOrEmpty(window, browserDetails);\n shimParameterlessSetLocalDescription(window);\n shimRTCIceServerUrls(window);\n shimCreateOfferLegacy(window);\n shimCallbacksAPI(window);\n shimLocalStreamsAPI(window);\n shimRemoteStreamsAPI(window);\n shimTrackEventTransceiver(window);\n shimGetUserMedia(window);\n shimAudioContext(window);\n shimRTCIceCandidate(window);\n shimMaxMessageSize(window, browserDetails);\n shimSendThrowTypeError(window);\n removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n return adapter;\n}\n\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nadapterFactory({\n window: typeof window === 'undefined' ? undefined : window\n});\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\nvar _assign = function __assign() {\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) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n return t;\n };\n return _assign.apply(this, arguments);\n};\nfunction __rest(s, e) {\n var t = {};\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") 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])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n}\nfunction __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\nvar ActionTypes;\n(function (ActionTypes) {\n ActionTypes[\"Start\"] = \"xstate.start\";\n ActionTypes[\"Stop\"] = \"xstate.stop\";\n ActionTypes[\"Raise\"] = \"xstate.raise\";\n ActionTypes[\"Send\"] = \"xstate.send\";\n ActionTypes[\"Cancel\"] = \"xstate.cancel\";\n ActionTypes[\"NullEvent\"] = \"\";\n ActionTypes[\"Assign\"] = \"xstate.assign\";\n ActionTypes[\"After\"] = \"xstate.after\";\n ActionTypes[\"DoneState\"] = \"done.state\";\n ActionTypes[\"DoneInvoke\"] = \"done.invoke\";\n ActionTypes[\"Log\"] = \"xstate.log\";\n ActionTypes[\"Init\"] = \"xstate.init\";\n ActionTypes[\"Invoke\"] = \"xstate.invoke\";\n ActionTypes[\"ErrorExecution\"] = \"error.execution\";\n ActionTypes[\"ErrorCommunication\"] = \"error.communication\";\n ActionTypes[\"ErrorPlatform\"] = \"error.platform\";\n ActionTypes[\"ErrorCustom\"] = \"xstate.error\";\n ActionTypes[\"Update\"] = \"xstate.update\";\n ActionTypes[\"Pure\"] = \"xstate.pure\";\n ActionTypes[\"Choose\"] = \"xstate.choose\";\n})(ActionTypes || (ActionTypes = {}));\nvar SpecialTargets;\n(function (SpecialTargets) {\n SpecialTargets[\"Parent\"] = \"#_parent\";\n SpecialTargets[\"Internal\"] = \"#_internal\";\n})(SpecialTargets || (SpecialTargets = {}));\n\nvar start$1 = ActionTypes.Start;\nvar stop$1 = ActionTypes.Stop;\nvar raise$1 = ActionTypes.Raise;\nvar send$1 = ActionTypes.Send;\nvar cancel$1 = ActionTypes.Cancel;\nvar nullEvent = ActionTypes.NullEvent;\nvar assign$2 = ActionTypes.Assign;\nActionTypes.After;\nActionTypes.DoneState;\nvar log = ActionTypes.Log;\nvar init = ActionTypes.Init;\nvar invoke = ActionTypes.Invoke;\nActionTypes.ErrorExecution;\nvar errorPlatform = ActionTypes.ErrorPlatform;\nvar error$1 = ActionTypes.ErrorCustom;\nvar update = ActionTypes.Update;\nvar choose = ActionTypes.Choose;\nvar pure = ActionTypes.Pure;\n\nvar STATE_DELIMITER = '.';\nvar EMPTY_ACTIVITY_MAP = {};\nvar DEFAULT_GUARD_TYPE = 'xstate.guard';\nvar TARGETLESS_KEY = '';\n\nvar IS_PRODUCTION = browser$1.env.NODE_ENV === 'production';\n\nvar _a;\nfunction matchesState(parentStateId, childStateId, delimiter) {\n if (delimiter === void 0) {\n delimiter = STATE_DELIMITER;\n }\n var parentStateValue = toStateValue(parentStateId, delimiter);\n var childStateValue = toStateValue(childStateId, delimiter);\n if (isString(childStateValue)) {\n if (isString(parentStateValue)) {\n return childStateValue === parentStateValue;\n } // Parent more specific than child\n\n return false;\n }\n if (isString(parentStateValue)) {\n return parentStateValue in childStateValue;\n }\n return Object.keys(parentStateValue).every(function (key) {\n if (!(key in childStateValue)) {\n return false;\n }\n return matchesState(parentStateValue[key], childStateValue[key]);\n });\n}\nfunction getEventType(event) {\n try {\n return isString(event) || typeof event === 'number' ? \"\".concat(event) : event.type;\n } catch (e) {\n throw new Error('Events must be strings or objects with a string event.type property.');\n }\n}\nfunction toStatePath(stateId, delimiter) {\n try {\n if (isArray(stateId)) {\n return stateId;\n }\n return stateId.toString().split(delimiter);\n } catch (e) {\n throw new Error(\"'\".concat(stateId, \"' is not a valid state path.\"));\n }\n}\nfunction isStateLike(state) {\n return typeof state === 'object' && 'value' in state && 'context' in state && 'event' in state && '_event' in state;\n}\nfunction toStateValue(stateValue, delimiter) {\n if (isStateLike(stateValue)) {\n return stateValue.value;\n }\n if (isArray(stateValue)) {\n return pathToStateValue(stateValue);\n }\n if (typeof stateValue !== 'string') {\n return stateValue;\n }\n var statePath = toStatePath(stateValue, delimiter);\n return pathToStateValue(statePath);\n}\nfunction pathToStateValue(statePath) {\n if (statePath.length === 1) {\n return statePath[0];\n }\n var value = {};\n var marker = value;\n for (var i = 0; i < statePath.length - 1; i++) {\n if (i === statePath.length - 2) {\n marker[statePath[i]] = statePath[i + 1];\n } else {\n marker[statePath[i]] = {};\n marker = marker[statePath[i]];\n }\n }\n return value;\n}\nfunction mapValues(collection, iteratee) {\n var result = {};\n var collectionKeys = Object.keys(collection);\n for (var i = 0; i < collectionKeys.length; i++) {\n var key = collectionKeys[i];\n result[key] = iteratee(collection[key], key, collection, i);\n }\n return result;\n}\nfunction mapFilterValues(collection, iteratee, predicate) {\n var e_1, _a;\n var result = {};\n try {\n for (var _b = __values(Object.keys(collection)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n var item = collection[key];\n if (!predicate(item)) {\n continue;\n }\n result[key] = iteratee(item, key, collection);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n return result;\n}\n/**\r\n * Retrieves a value at the given path.\r\n * @param props The deep path to the prop of the desired value\r\n */\n\nvar path = function path(props) {\n return function (object) {\n var e_2, _a;\n var result = object;\n try {\n for (var props_1 = __values(props), props_1_1 = props_1.next(); !props_1_1.done; props_1_1 = props_1.next()) {\n var prop = props_1_1.value;\n result = result[prop];\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (props_1_1 && !props_1_1.done && (_a = props_1.return)) _a.call(props_1);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n return result;\n };\n};\n/**\r\n * Retrieves a value at the given path via the nested accessor prop.\r\n * @param props The deep path to the prop of the desired value\r\n */\n\nfunction nestedPath(props, accessorProp) {\n return function (object) {\n var e_3, _a;\n var result = object;\n try {\n for (var props_2 = __values(props), props_2_1 = props_2.next(); !props_2_1.done; props_2_1 = props_2.next()) {\n var prop = props_2_1.value;\n result = result[accessorProp][prop];\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (props_2_1 && !props_2_1.done && (_a = props_2.return)) _a.call(props_2);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n return result;\n };\n}\nfunction toStatePaths(stateValue) {\n if (!stateValue) {\n return [[]];\n }\n if (isString(stateValue)) {\n return [[stateValue]];\n }\n var result = flatten(Object.keys(stateValue).map(function (key) {\n var subStateValue = stateValue[key];\n if (typeof subStateValue !== 'string' && (!subStateValue || !Object.keys(subStateValue).length)) {\n return [[key]];\n }\n return toStatePaths(stateValue[key]).map(function (subPath) {\n return [key].concat(subPath);\n });\n }));\n return result;\n}\nfunction flatten(array) {\n var _a;\n return (_a = []).concat.apply(_a, __spreadArray([], __read(array), false));\n}\nfunction toArrayStrict(value) {\n if (isArray(value)) {\n return value;\n }\n return [value];\n}\nfunction toArray(value) {\n if (value === undefined) {\n return [];\n }\n return toArrayStrict(value);\n}\nfunction mapContext(mapper, context, _event) {\n var e_5, _a;\n if (isFunction(mapper)) {\n return mapper(context, _event.data);\n }\n var result = {};\n try {\n for (var _b = __values(Object.keys(mapper)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n var subMapper = mapper[key];\n if (isFunction(subMapper)) {\n result[key] = subMapper(context, _event.data);\n } else {\n result[key] = subMapper;\n }\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n return result;\n}\nfunction isBuiltInEvent(eventType) {\n return /^(done|error)\\./.test(eventType);\n}\nfunction isPromiseLike(value) {\n if (value instanceof Promise) {\n return true;\n } // Check if shape matches the Promise/A+ specification for a \"thenable\".\n\n if (value !== null && (isFunction(value) || typeof value === 'object') && isFunction(value.then)) {\n return true;\n }\n return false;\n}\nfunction isBehavior(value) {\n return value !== null && typeof value === 'object' && 'transition' in value && typeof value.transition === 'function';\n}\nfunction partition(items, predicate) {\n var e_6, _a;\n var _b = __read([[], []], 2),\n truthy = _b[0],\n falsy = _b[1];\n try {\n for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {\n var item = items_1_1.value;\n if (predicate(item)) {\n truthy.push(item);\n } else {\n falsy.push(item);\n }\n }\n } catch (e_6_1) {\n e_6 = {\n error: e_6_1\n };\n } finally {\n try {\n if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);\n } finally {\n if (e_6) throw e_6.error;\n }\n }\n return [truthy, falsy];\n}\nfunction updateHistoryStates(hist, stateValue) {\n return mapValues(hist.states, function (subHist, key) {\n if (!subHist) {\n return undefined;\n }\n var subStateValue = (isString(stateValue) ? undefined : stateValue[key]) || (subHist ? subHist.current : undefined);\n if (!subStateValue) {\n return undefined;\n }\n return {\n current: subStateValue,\n states: updateHistoryStates(subHist, subStateValue)\n };\n });\n}\nfunction updateHistoryValue(hist, stateValue) {\n return {\n current: stateValue,\n states: updateHistoryStates(hist, stateValue)\n };\n}\nfunction updateContext(context, _event, assignActions, state) {\n if (!IS_PRODUCTION) {\n warn(!!context, 'Attempting to update undefined context');\n }\n var updatedContext = context ? assignActions.reduce(function (acc, assignAction) {\n var e_7, _a;\n var assignment = assignAction.assignment;\n var meta = {\n state: state,\n action: assignAction,\n _event: _event\n };\n var partialUpdate = {};\n if (isFunction(assignment)) {\n partialUpdate = assignment(acc, _event.data, meta);\n } else {\n try {\n for (var _b = __values(Object.keys(assignment)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n var propAssignment = assignment[key];\n partialUpdate[key] = isFunction(propAssignment) ? propAssignment(acc, _event.data, meta) : propAssignment;\n }\n } catch (e_7_1) {\n e_7 = {\n error: e_7_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_7) throw e_7.error;\n }\n }\n }\n return Object.assign({}, acc, partialUpdate);\n }, context) : context;\n return updatedContext;\n} // tslint:disable-next-line:no-empty\n\nvar warn = function warn() {};\nif (!IS_PRODUCTION) {\n warn = function warn(condition, message) {\n var error = condition instanceof Error ? condition : undefined;\n if (!error && condition) {\n return;\n }\n if (console !== undefined) {\n var args = [\"Warning: \".concat(message)];\n if (error) {\n args.push(error);\n } // tslint:disable-next-line:no-console\n\n console.warn.apply(console, args);\n }\n };\n}\nfunction isArray(value) {\n return Array.isArray(value);\n} // tslint:disable-next-line:ban-types\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\nfunction isString(value) {\n return typeof value === 'string';\n}\nfunction toGuard(condition, guardMap) {\n if (!condition) {\n return undefined;\n }\n if (isString(condition)) {\n return {\n type: DEFAULT_GUARD_TYPE,\n name: condition,\n predicate: guardMap ? guardMap[condition] : undefined\n };\n }\n if (isFunction(condition)) {\n return {\n type: DEFAULT_GUARD_TYPE,\n name: condition.name,\n predicate: condition\n };\n }\n return condition;\n}\nfunction isObservable(value) {\n try {\n return 'subscribe' in value && isFunction(value.subscribe);\n } catch (e) {\n return false;\n }\n}\nvar symbolObservable = /*#__PURE__*/function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n}(); // TODO: to be removed in v5, left it out just to minimize the scope of the change and maintain compatibility with older versions of integration paackages\n\n(_a = {}, _a[symbolObservable] = function () {\n return this;\n}, _a[Symbol.observable] = function () {\n return this;\n}, _a);\nfunction isMachine(value) {\n return !!value && '__xstatenode' in value;\n}\nfunction isActor$1(value) {\n return !!value && typeof value.send === 'function';\n}\nfunction toEventObject(event, payload // id?: TEvent['type']\n) {\n if (isString(event) || typeof event === 'number') {\n return _assign({\n type: event\n }, payload);\n }\n return event;\n}\nfunction toSCXMLEvent(event, scxmlEvent) {\n if (!isString(event) && '$$type' in event && event.$$type === 'scxml') {\n return event;\n }\n var eventObject = toEventObject(event);\n return _assign({\n name: eventObject.type,\n data: eventObject,\n $$type: 'scxml',\n type: 'external'\n }, scxmlEvent);\n}\nfunction toTransitionConfigArray(event, configLike) {\n var transitions = toArrayStrict(configLike).map(function (transitionLike) {\n if (typeof transitionLike === 'undefined' || typeof transitionLike === 'string' || isMachine(transitionLike)) {\n return {\n target: transitionLike,\n event: event\n };\n }\n return _assign(_assign({}, transitionLike), {\n event: event\n });\n });\n return transitions;\n}\nfunction normalizeTarget(target) {\n if (target === undefined || target === TARGETLESS_KEY) {\n return undefined;\n }\n return toArray(target);\n}\nfunction reportUnhandledExceptionOnInvocation(originalError, currentError, id) {\n if (!IS_PRODUCTION) {\n var originalStackTrace = originalError.stack ? \" Stacktrace was '\".concat(originalError.stack, \"'\") : '';\n if (originalError === currentError) {\n // tslint:disable-next-line:no-console\n console.error(\"Missing onError handler for invocation '\".concat(id, \"', error was '\").concat(originalError, \"'.\").concat(originalStackTrace));\n } else {\n var stackTrace = currentError.stack ? \" Stacktrace was '\".concat(currentError.stack, \"'\") : ''; // tslint:disable-next-line:no-console\n\n console.error(\"Missing onError handler and/or unhandled exception/promise rejection for invocation '\".concat(id, \"'. \") + \"Original error: '\".concat(originalError, \"'. \").concat(originalStackTrace, \" Current error is '\").concat(currentError, \"'.\").concat(stackTrace));\n }\n }\n}\nfunction evaluateGuard(machine, guard, context, _event, state) {\n var guards = machine.options.guards;\n var guardMeta = {\n state: state,\n cond: guard,\n _event: _event\n }; // TODO: do not hardcode!\n\n if (guard.type === DEFAULT_GUARD_TYPE) {\n return ((guards === null || guards === void 0 ? void 0 : guards[guard.name]) || guard.predicate)(context, _event.data, guardMeta);\n }\n var condFn = guards === null || guards === void 0 ? void 0 : guards[guard.type];\n if (!condFn) {\n throw new Error(\"Guard '\".concat(guard.type, \"' is not implemented on machine '\").concat(machine.id, \"'.\"));\n }\n return condFn(context, _event.data, guardMeta);\n}\nfunction toInvokeSource$1(src) {\n if (typeof src === 'string') {\n return {\n type: src\n };\n }\n return src;\n}\nfunction toObserver(nextHandler, errorHandler, completionHandler) {\n var noop = function noop() {};\n var isObserver = typeof nextHandler === 'object';\n var self = isObserver ? nextHandler : null;\n return {\n next: ((isObserver ? nextHandler.next : nextHandler) || noop).bind(self),\n error: ((isObserver ? nextHandler.error : errorHandler) || noop).bind(self),\n complete: ((isObserver ? nextHandler.complete : completionHandler) || noop).bind(self)\n };\n}\nfunction createInvokeId(stateNodeId, index) {\n return \"\".concat(stateNodeId, \":invocation[\").concat(index, \"]\");\n}\n\nvar initEvent = /*#__PURE__*/toSCXMLEvent({\n type: init\n});\nfunction getActionFunction(actionType, actionFunctionMap) {\n return actionFunctionMap ? actionFunctionMap[actionType] || undefined : undefined;\n}\nfunction toActionObject(action, actionFunctionMap) {\n var actionObject;\n if (isString(action) || typeof action === 'number') {\n var exec = getActionFunction(action, actionFunctionMap);\n if (isFunction(exec)) {\n actionObject = {\n type: action,\n exec: exec\n };\n } else if (exec) {\n actionObject = exec;\n } else {\n actionObject = {\n type: action,\n exec: undefined\n };\n }\n } else if (isFunction(action)) {\n actionObject = {\n // Convert action to string if unnamed\n type: action.name || action.toString(),\n exec: action\n };\n } else {\n var exec = getActionFunction(action.type, actionFunctionMap);\n if (isFunction(exec)) {\n actionObject = _assign(_assign({}, action), {\n exec: exec\n });\n } else if (exec) {\n var actionType = exec.type || action.type;\n actionObject = _assign(_assign(_assign({}, exec), action), {\n type: actionType\n });\n } else {\n actionObject = action;\n }\n }\n return actionObject;\n}\nvar toActionObjects = function toActionObjects(action, actionFunctionMap) {\n if (!action) {\n return [];\n }\n var actions = isArray(action) ? action : [action];\n return actions.map(function (subAction) {\n return toActionObject(subAction, actionFunctionMap);\n });\n};\nfunction toActivityDefinition(action) {\n var actionObject = toActionObject(action);\n return _assign(_assign({\n id: isString(action) ? action : actionObject.id\n }, actionObject), {\n type: actionObject.type\n });\n}\n/**\r\n * Raises an event. This places the event in the internal event queue, so that\r\n * the event is immediately consumed by the machine in the current step.\r\n *\r\n * @param eventType The event to raise.\r\n */\n\nfunction raise(event) {\n if (!isString(event)) {\n return send(event, {\n to: SpecialTargets.Internal\n });\n }\n return {\n type: raise$1,\n event: event\n };\n}\nfunction resolveRaise(action) {\n return {\n type: raise$1,\n _event: toSCXMLEvent(action.event)\n };\n}\n/**\r\n * Sends an event. This returns an action that will be read by an interpreter to\r\n * send the event in the next step, after the current step is finished executing.\r\n *\r\n * @param event The event to send.\r\n * @param options Options to pass into the send event:\r\n * - `id` - The unique send event identifier (used with `cancel()`).\r\n * - `delay` - The number of milliseconds to delay the sending of the event.\r\n * - `to` - The target of this event (by default, the machine the event was sent from).\r\n */\n\nfunction send(event, options) {\n return {\n to: options ? options.to : undefined,\n type: send$1,\n event: isFunction(event) ? event : toEventObject(event),\n delay: options ? options.delay : undefined,\n id: options && options.id !== undefined ? options.id : isFunction(event) ? event.name : getEventType(event)\n };\n}\nfunction resolveSend(action, ctx, _event, delaysMap) {\n var meta = {\n _event: _event\n }; // TODO: helper function for resolving Expr\n\n var resolvedEvent = toSCXMLEvent(isFunction(action.event) ? action.event(ctx, _event.data, meta) : action.event);\n var resolvedDelay;\n if (isString(action.delay)) {\n var configDelay = delaysMap && delaysMap[action.delay];\n resolvedDelay = isFunction(configDelay) ? configDelay(ctx, _event.data, meta) : configDelay;\n } else {\n resolvedDelay = isFunction(action.delay) ? action.delay(ctx, _event.data, meta) : action.delay;\n }\n var resolvedTarget = isFunction(action.to) ? action.to(ctx, _event.data, meta) : action.to;\n return _assign(_assign({}, action), {\n to: resolvedTarget,\n _event: resolvedEvent,\n event: resolvedEvent.data,\n delay: resolvedDelay\n });\n}\nvar resolveLog = function resolveLog(action, ctx, _event) {\n return _assign(_assign({}, action), {\n value: isString(action.expr) ? action.expr : action.expr(ctx, _event.data, {\n _event: _event\n })\n });\n};\n/**\r\n * Cancels an in-flight `send(...)` action. A canceled sent action will not\r\n * be executed, nor will its event be sent, unless it has already been sent\r\n * (e.g., if `cancel(...)` is called after the `send(...)` action's `delay`).\r\n *\r\n * @param sendId The `id` of the `send(...)` action to cancel.\r\n */\n\nvar cancel = function cancel(sendId) {\n return {\n type: cancel$1,\n sendId: sendId\n };\n};\n/**\r\n * Starts an activity.\r\n *\r\n * @param activity The activity to start.\r\n */\n\nfunction start(activity) {\n var activityDef = toActivityDefinition(activity);\n return {\n type: ActionTypes.Start,\n activity: activityDef,\n exec: undefined\n };\n}\n/**\r\n * Stops an activity.\r\n *\r\n * @param actorRef The activity to stop.\r\n */\n\nfunction stop(actorRef) {\n var activity = isFunction(actorRef) ? actorRef : toActivityDefinition(actorRef);\n return {\n type: ActionTypes.Stop,\n activity: activity,\n exec: undefined\n };\n}\nfunction resolveStop(action, context, _event) {\n var actorRefOrString = isFunction(action.activity) ? action.activity(context, _event.data) : action.activity;\n var resolvedActorRef = typeof actorRefOrString === 'string' ? {\n id: actorRefOrString\n } : actorRefOrString;\n var actionObject = {\n type: ActionTypes.Stop,\n activity: resolvedActorRef\n };\n return actionObject;\n}\n/**\r\n * Updates the current context of the machine.\r\n *\r\n * @param assignment An object that represents the partial context to update.\r\n */\n\nvar assign$1 = function assign(assignment) {\n return {\n type: assign$2,\n assignment: assignment\n };\n};\n/**\r\n * Returns an event type that represents an implicit event that\r\n * is sent after the specified `delay`.\r\n *\r\n * @param delayRef The delay in milliseconds\r\n * @param id The state node ID where this event is handled\r\n */\n\nfunction after(delayRef, id) {\n var idSuffix = id ? \"#\".concat(id) : '';\n return \"\".concat(ActionTypes.After, \"(\").concat(delayRef, \")\").concat(idSuffix);\n}\n/**\r\n * Returns an event that represents that a final state node\r\n * has been reached in the parent state node.\r\n *\r\n * @param id The final state node's parent state node `id`\r\n * @param data The data to pass into the event\r\n */\n\nfunction done(id, data) {\n var type = \"\".concat(ActionTypes.DoneState, \".\").concat(id);\n var eventObject = {\n type: type,\n data: data\n };\n eventObject.toString = function () {\n return type;\n };\n return eventObject;\n}\n/**\r\n * Returns an event that represents that an invoked service has terminated.\r\n *\r\n * An invoked service is terminated when it has reached a top-level final state node,\r\n * but not when it is canceled.\r\n *\r\n * @param id The final state node ID\r\n * @param data The data to pass into the event\r\n */\n\nfunction doneInvoke(id, data) {\n var type = \"\".concat(ActionTypes.DoneInvoke, \".\").concat(id);\n var eventObject = {\n type: type,\n data: data\n };\n eventObject.toString = function () {\n return type;\n };\n return eventObject;\n}\nfunction error(id, data) {\n var type = \"\".concat(ActionTypes.ErrorPlatform, \".\").concat(id);\n var eventObject = {\n type: type,\n data: data\n };\n eventObject.toString = function () {\n return type;\n };\n return eventObject;\n}\nfunction resolveActions(machine, currentState, currentContext, _event, actions, predictableExec, preserveActionOrder) {\n if (preserveActionOrder === void 0) {\n preserveActionOrder = false;\n }\n var _a = __read(preserveActionOrder ? [[], actions] : partition(actions, function (action) {\n return action.type === assign$2;\n }), 2),\n assignActions = _a[0],\n otherActions = _a[1];\n var updatedContext = assignActions.length ? updateContext(currentContext, _event, assignActions, currentState) : currentContext;\n var preservedContexts = preserveActionOrder ? [currentContext] : undefined;\n var resolvedActions = flatten(otherActions.map(function (actionObject) {\n var _a;\n switch (actionObject.type) {\n case raise$1:\n {\n return resolveRaise(actionObject);\n }\n case send$1:\n var sendAction = resolveSend(actionObject, updatedContext, _event, machine.options.delays); // TODO: fix ActionTypes.Init\n\n if (!IS_PRODUCTION) {\n // warn after resolving as we can create better contextual message here\n warn(!isString(actionObject.delay) || typeof sendAction.delay === 'number',\n // tslint:disable-next-line:max-line-length\n \"No delay reference for delay expression '\".concat(actionObject.delay, \"' was found on machine '\").concat(machine.id, \"'\"));\n }\n if (sendAction.to !== SpecialTargets.Internal) {\n predictableExec === null || predictableExec === void 0 ? void 0 : predictableExec(sendAction, updatedContext, _event);\n }\n return sendAction;\n case log:\n {\n var resolved = resolveLog(actionObject, updatedContext, _event);\n predictableExec === null || predictableExec === void 0 ? void 0 : predictableExec(resolved, updatedContext, _event);\n return resolved;\n }\n case choose:\n {\n var chooseAction = actionObject;\n var matchedActions = (_a = chooseAction.conds.find(function (condition) {\n var guard = toGuard(condition.cond, machine.options.guards);\n return !guard || evaluateGuard(machine, guard, updatedContext, _event, !predictableExec ? currentState : undefined);\n })) === null || _a === void 0 ? void 0 : _a.actions;\n if (!matchedActions) {\n return [];\n }\n var _b = __read(resolveActions(machine, currentState, updatedContext, _event, toActionObjects(toArray(matchedActions), machine.options.actions), predictableExec, preserveActionOrder), 2),\n resolvedActionsFromChoose = _b[0],\n resolvedContextFromChoose = _b[1];\n updatedContext = resolvedContextFromChoose;\n preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n return resolvedActionsFromChoose;\n }\n case pure:\n {\n var matchedActions = actionObject.get(updatedContext, _event.data);\n if (!matchedActions) {\n return [];\n }\n var _c = __read(resolveActions(machine, currentState, updatedContext, _event, toActionObjects(toArray(matchedActions), machine.options.actions), predictableExec, preserveActionOrder), 2),\n resolvedActionsFromPure = _c[0],\n resolvedContext = _c[1];\n updatedContext = resolvedContext;\n preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n return resolvedActionsFromPure;\n }\n case stop$1:\n {\n var resolved = resolveStop(actionObject, updatedContext, _event);\n predictableExec === null || predictableExec === void 0 ? void 0 : predictableExec(resolved, updatedContext, _event);\n return resolved;\n }\n case assign$2:\n {\n updatedContext = updateContext(updatedContext, _event, [actionObject], !predictableExec ? currentState : undefined);\n preservedContexts === null || preservedContexts === void 0 ? void 0 : preservedContexts.push(updatedContext);\n break;\n }\n default:\n var resolvedActionObject = toActionObject(actionObject, machine.options.actions);\n var exec_1 = resolvedActionObject.exec;\n if (predictableExec) {\n predictableExec(resolvedActionObject, updatedContext, _event);\n } else if (exec_1 && preservedContexts) {\n var contextIndex_1 = preservedContexts.length - 1;\n resolvedActionObject = _assign(_assign({}, resolvedActionObject), {\n exec: function exec(_ctx) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n exec_1.apply(void 0, __spreadArray([preservedContexts[contextIndex_1]], __read(args), false));\n }\n });\n }\n return resolvedActionObject;\n }\n }).filter(function (a) {\n return !!a;\n }));\n return [resolvedActions, updatedContext];\n}\n\n/**\r\n * Maintains a stack of the current service in scope.\r\n * This is used to provide the correct service to spawn().\r\n */\nvar provide = function provide(service, fn) {\n var result = fn(service);\n return result;\n};\n\nfunction createNullActor(id) {\n var _a;\n return _a = {\n id: id,\n send: function send() {\n return void 0;\n },\n subscribe: function subscribe() {\n return {\n unsubscribe: function unsubscribe() {\n return void 0;\n }\n };\n },\n getSnapshot: function getSnapshot() {\n return undefined;\n },\n toJSON: function toJSON() {\n return {\n id: id\n };\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a;\n}\n/**\r\n * Creates a deferred actor that is able to be invoked given the provided\r\n * invocation information in its `.meta` value.\r\n *\r\n * @param invokeDefinition The meta information needed to invoke the actor.\r\n */\n\nfunction createInvocableActor(invokeDefinition, machine, context, _event) {\n var _a;\n var invokeSrc = toInvokeSource$1(invokeDefinition.src);\n var serviceCreator = (_a = machine === null || machine === void 0 ? void 0 : machine.options.services) === null || _a === void 0 ? void 0 : _a[invokeSrc.type];\n var resolvedData = invokeDefinition.data ? mapContext(invokeDefinition.data, context, _event) : undefined;\n var tempActor = serviceCreator ? createDeferredActor(serviceCreator, invokeDefinition.id, resolvedData) : createNullActor(invokeDefinition.id); // @ts-ignore\n\n tempActor.meta = invokeDefinition;\n return tempActor;\n}\nfunction createDeferredActor(entity, id, data) {\n var tempActor = createNullActor(id); // @ts-ignore\n\n tempActor.deferred = true;\n if (isMachine(entity)) {\n // \"mute\" the existing service scope so potential spawned actors within the `.initialState` stay deferred here\n var initialState_1 = tempActor.state = provide(undefined, function () {\n return (data ? entity.withContext(data) : entity).initialState;\n });\n tempActor.getSnapshot = function () {\n return initialState_1;\n };\n }\n return tempActor;\n}\nfunction isActor(item) {\n try {\n return typeof item.send === 'function';\n } catch (e) {\n return false;\n }\n}\nfunction isSpawnedActor(item) {\n return isActor(item) && 'id' in item;\n} // TODO: refactor the return type, this could be written in a better way but it's best to avoid unneccessary breaking changes now\n\nfunction toActorRef(actorRefLike) {\n var _a;\n return _assign((_a = {\n subscribe: function subscribe() {\n return {\n unsubscribe: function unsubscribe() {\n return void 0;\n }\n };\n },\n id: 'anonymous',\n getSnapshot: function getSnapshot() {\n return undefined;\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a), actorRefLike);\n}\n\nvar isLeafNode = function isLeafNode(stateNode) {\n return stateNode.type === 'atomic' || stateNode.type === 'final';\n};\nfunction getAllChildren(stateNode) {\n return Object.keys(stateNode.states).map(function (key) {\n return stateNode.states[key];\n });\n}\nfunction getChildren(stateNode) {\n return getAllChildren(stateNode).filter(function (sn) {\n return sn.type !== 'history';\n });\n}\nfunction getAllStateNodes(stateNode) {\n var stateNodes = [stateNode];\n if (isLeafNode(stateNode)) {\n return stateNodes;\n }\n return stateNodes.concat(flatten(getChildren(stateNode).map(getAllStateNodes)));\n}\nfunction getConfiguration(prevStateNodes, stateNodes) {\n var e_1, _a, e_2, _b, e_3, _c, e_4, _d;\n var prevConfiguration = new Set(prevStateNodes);\n var prevAdjList = getAdjList(prevConfiguration);\n var configuration = new Set(stateNodes);\n try {\n // add all ancestors\n for (var configuration_1 = __values(configuration), configuration_1_1 = configuration_1.next(); !configuration_1_1.done; configuration_1_1 = configuration_1.next()) {\n var s = configuration_1_1.value;\n var m = s.parent;\n while (m && !configuration.has(m)) {\n configuration.add(m);\n m = m.parent;\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (configuration_1_1 && !configuration_1_1.done && (_a = configuration_1.return)) _a.call(configuration_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n var adjList = getAdjList(configuration);\n try {\n // add descendants\n for (var configuration_2 = __values(configuration), configuration_2_1 = configuration_2.next(); !configuration_2_1.done; configuration_2_1 = configuration_2.next()) {\n var s = configuration_2_1.value; // if previously active, add existing child nodes\n\n if (s.type === 'compound' && (!adjList.get(s) || !adjList.get(s).length)) {\n if (prevAdjList.get(s)) {\n prevAdjList.get(s).forEach(function (sn) {\n return configuration.add(sn);\n });\n } else {\n s.initialStateNodes.forEach(function (sn) {\n return configuration.add(sn);\n });\n }\n } else {\n if (s.type === 'parallel') {\n try {\n for (var _e = (e_3 = void 0, __values(getChildren(s))), _f = _e.next(); !_f.done; _f = _e.next()) {\n var child = _f.value;\n if (!configuration.has(child)) {\n configuration.add(child);\n if (prevAdjList.get(child)) {\n prevAdjList.get(child).forEach(function (sn) {\n return configuration.add(sn);\n });\n } else {\n child.initialStateNodes.forEach(function (sn) {\n return configuration.add(sn);\n });\n }\n }\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_c = _e.return)) _c.call(_e);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n }\n }\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (configuration_2_1 && !configuration_2_1.done && (_b = configuration_2.return)) _b.call(configuration_2);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n try {\n // add all ancestors\n for (var configuration_3 = __values(configuration), configuration_3_1 = configuration_3.next(); !configuration_3_1.done; configuration_3_1 = configuration_3.next()) {\n var s = configuration_3_1.value;\n var m = s.parent;\n while (m && !configuration.has(m)) {\n configuration.add(m);\n m = m.parent;\n }\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (configuration_3_1 && !configuration_3_1.done && (_d = configuration_3.return)) _d.call(configuration_3);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n return configuration;\n}\nfunction getValueFromAdj(baseNode, adjList) {\n var childStateNodes = adjList.get(baseNode);\n if (!childStateNodes) {\n return {}; // todo: fix?\n }\n\n if (baseNode.type === 'compound') {\n var childStateNode = childStateNodes[0];\n if (childStateNode) {\n if (isLeafNode(childStateNode)) {\n return childStateNode.key;\n }\n } else {\n return {};\n }\n }\n var stateValue = {};\n childStateNodes.forEach(function (csn) {\n stateValue[csn.key] = getValueFromAdj(csn, adjList);\n });\n return stateValue;\n}\nfunction getAdjList(configuration) {\n var e_5, _a;\n var adjList = new Map();\n try {\n for (var configuration_4 = __values(configuration), configuration_4_1 = configuration_4.next(); !configuration_4_1.done; configuration_4_1 = configuration_4.next()) {\n var s = configuration_4_1.value;\n if (!adjList.has(s)) {\n adjList.set(s, []);\n }\n if (s.parent) {\n if (!adjList.has(s.parent)) {\n adjList.set(s.parent, []);\n }\n adjList.get(s.parent).push(s);\n }\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (configuration_4_1 && !configuration_4_1.done && (_a = configuration_4.return)) _a.call(configuration_4);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n return adjList;\n}\nfunction getValue(rootNode, configuration) {\n var config = getConfiguration([rootNode], configuration);\n return getValueFromAdj(rootNode, getAdjList(config));\n}\nfunction has(iterable, item) {\n if (Array.isArray(iterable)) {\n return iterable.some(function (member) {\n return member === item;\n });\n }\n if (iterable instanceof Set) {\n return iterable.has(item);\n }\n return false; // TODO: fix\n}\n\nfunction nextEvents(configuration) {\n return __spreadArray([], __read(new Set(flatten(__spreadArray([], __read(configuration.map(function (sn) {\n return sn.ownEvents;\n })), false)))), false);\n}\nfunction isInFinalState(configuration, stateNode) {\n if (stateNode.type === 'compound') {\n return getChildren(stateNode).some(function (s) {\n return s.type === 'final' && has(configuration, s);\n });\n }\n if (stateNode.type === 'parallel') {\n return getChildren(stateNode).every(function (sn) {\n return isInFinalState(configuration, sn);\n });\n }\n return false;\n}\nfunction getMeta(configuration) {\n if (configuration === void 0) {\n configuration = [];\n }\n return configuration.reduce(function (acc, stateNode) {\n if (stateNode.meta !== undefined) {\n acc[stateNode.id] = stateNode.meta;\n }\n return acc;\n }, {});\n}\nfunction getTagsFromConfiguration(configuration) {\n return new Set(flatten(configuration.map(function (sn) {\n return sn.tags;\n })));\n}\n\nfunction stateValuesEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (a === undefined || b === undefined) {\n return false;\n }\n if (isString(a) || isString(b)) {\n return a === b;\n }\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n return aKeys.length === bKeys.length && aKeys.every(function (key) {\n return stateValuesEqual(a[key], b[key]);\n });\n}\nfunction isStateConfig(state) {\n if (typeof state !== 'object' || state === null) {\n return false;\n }\n return 'value' in state && '_event' in state;\n}\nfunction bindActionToState(action, state) {\n var exec = action.exec;\n var boundAction = _assign(_assign({}, action), {\n exec: exec !== undefined ? function () {\n return exec(state.context, state.event, {\n action: action,\n state: state,\n _event: state._event\n });\n } : undefined\n });\n return boundAction;\n}\nvar State = /*#__PURE__*/\n\n/** @class */\nfunction () {\n /**\r\n * Creates a new State instance.\r\n * @param value The state value\r\n * @param context The extended state\r\n * @param historyValue The tree representing historical values of the state nodes\r\n * @param history The previous state\r\n * @param actions An array of action objects to execute as side-effects\r\n * @param activities A mapping of activities and whether they are started (`true`) or stopped (`false`).\r\n * @param meta\r\n * @param events Internal event queue. Should be empty with run-to-completion semantics.\r\n * @param configuration\r\n */\n function State(config) {\n var _this = this;\n var _a;\n this.actions = [];\n this.activities = EMPTY_ACTIVITY_MAP;\n this.meta = {};\n this.events = [];\n this.value = config.value;\n this.context = config.context;\n this._event = config._event;\n this._sessionid = config._sessionid;\n this.event = this._event.data;\n this.historyValue = config.historyValue;\n this.history = config.history;\n this.actions = config.actions || [];\n this.activities = config.activities || EMPTY_ACTIVITY_MAP;\n this.meta = getMeta(config.configuration);\n this.events = config.events || [];\n this.matches = this.matches.bind(this);\n this.toStrings = this.toStrings.bind(this);\n this.configuration = config.configuration;\n this.transitions = config.transitions;\n this.children = config.children;\n this.done = !!config.done;\n this.tags = (_a = Array.isArray(config.tags) ? new Set(config.tags) : config.tags) !== null && _a !== void 0 ? _a : new Set();\n this.machine = config.machine;\n Object.defineProperty(this, 'nextEvents', {\n get: function get() {\n return nextEvents(_this.configuration);\n }\n });\n }\n /**\r\n * Creates a new State instance for the given `stateValue` and `context`.\r\n * @param stateValue\r\n * @param context\r\n */\n\n State.from = function (stateValue, context) {\n if (stateValue instanceof State) {\n if (stateValue.context !== context) {\n return new State({\n value: stateValue.value,\n context: context,\n _event: stateValue._event,\n _sessionid: null,\n historyValue: stateValue.historyValue,\n history: stateValue.history,\n actions: [],\n activities: stateValue.activities,\n meta: {},\n events: [],\n configuration: [],\n transitions: [],\n children: {}\n });\n }\n return stateValue;\n }\n var _event = initEvent;\n return new State({\n value: stateValue,\n context: context,\n _event: _event,\n _sessionid: null,\n historyValue: undefined,\n history: undefined,\n actions: [],\n activities: undefined,\n meta: undefined,\n events: [],\n configuration: [],\n transitions: [],\n children: {}\n });\n };\n /**\r\n * Creates a new State instance for the given `config`.\r\n * @param config The state config\r\n */\n\n State.create = function (config) {\n return new State(config);\n };\n /**\r\n * Creates a new `State` instance for the given `stateValue` and `context` with no actions (side-effects).\r\n * @param stateValue\r\n * @param context\r\n */\n\n State.inert = function (stateValue, context) {\n if (stateValue instanceof State) {\n if (!stateValue.actions.length) {\n return stateValue;\n }\n var _event = initEvent;\n return new State({\n value: stateValue.value,\n context: context,\n _event: _event,\n _sessionid: null,\n historyValue: stateValue.historyValue,\n history: stateValue.history,\n activities: stateValue.activities,\n configuration: stateValue.configuration,\n transitions: [],\n children: {}\n });\n }\n return State.from(stateValue, context);\n };\n /**\r\n * Returns an array of all the string leaf state node paths.\r\n * @param stateValue\r\n * @param delimiter The character(s) that separate each subpath in the string state node path.\r\n */\n\n State.prototype.toStrings = function (stateValue, delimiter) {\n var _this = this;\n if (stateValue === void 0) {\n stateValue = this.value;\n }\n if (delimiter === void 0) {\n delimiter = '.';\n }\n if (isString(stateValue)) {\n return [stateValue];\n }\n var valueKeys = Object.keys(stateValue);\n return valueKeys.concat.apply(valueKeys, __spreadArray([], __read(valueKeys.map(function (key) {\n return _this.toStrings(stateValue[key], delimiter).map(function (s) {\n return key + delimiter + s;\n });\n })), false));\n };\n State.prototype.toJSON = function () {\n var _a = this;\n _a.configuration;\n _a.transitions;\n var tags = _a.tags;\n _a.machine;\n var jsonValues = __rest(_a, [\"configuration\", \"transitions\", \"tags\", \"machine\"]);\n return _assign(_assign({}, jsonValues), {\n tags: Array.from(tags)\n });\n };\n State.prototype.matches = function (parentStateValue) {\n return matchesState(parentStateValue, this.value);\n };\n /**\r\n * Whether the current state configuration has a state node with the specified `tag`.\r\n * @param tag\r\n */\n\n State.prototype.hasTag = function (tag) {\n return this.tags.has(tag);\n };\n /**\r\n * Determines whether sending the `event` will cause a non-forbidden transition\r\n * to be selected, even if the transitions have no actions nor\r\n * change the state value.\r\n *\r\n * @param event The event to test\r\n * @returns Whether the event will cause a transition\r\n */\n\n State.prototype.can = function (event) {\n var _a;\n if (IS_PRODUCTION) {\n warn(!!this.machine, \"state.can(...) used outside of a machine-created State object; this will always return false.\");\n }\n var transitionData = (_a = this.machine) === null || _a === void 0 ? void 0 : _a.getTransitionData(this, event);\n return !!(transitionData === null || transitionData === void 0 ? void 0 : transitionData.transitions.length) &&\n // Check that at least one transition is not forbidden\n transitionData.transitions.some(function (t) {\n return t.target !== undefined || t.actions.length;\n });\n };\n return State;\n}();\n\nvar defaultOptions = {\n deferEvents: false\n};\nvar Scheduler = /*#__PURE__*/\n\n/** @class */\nfunction () {\n function Scheduler(options) {\n this.processingEvent = false;\n this.queue = [];\n this.initialized = false;\n this.options = _assign(_assign({}, defaultOptions), options);\n }\n Scheduler.prototype.initialize = function (callback) {\n this.initialized = true;\n if (callback) {\n if (!this.options.deferEvents) {\n this.schedule(callback);\n return;\n }\n this.process(callback);\n }\n this.flushEvents();\n };\n Scheduler.prototype.schedule = function (task) {\n if (!this.initialized || this.processingEvent) {\n this.queue.push(task);\n return;\n }\n if (this.queue.length !== 0) {\n throw new Error('Event queue should be empty when it is not processing events');\n }\n this.process(task);\n this.flushEvents();\n };\n Scheduler.prototype.clear = function () {\n this.queue = [];\n };\n Scheduler.prototype.flushEvents = function () {\n var nextCallback = this.queue.shift();\n while (nextCallback) {\n this.process(nextCallback);\n nextCallback = this.queue.shift();\n }\n };\n Scheduler.prototype.process = function (callback) {\n this.processingEvent = true;\n try {\n callback();\n } catch (e) {\n // there is no use to keep the future events\n // as the situation is not anymore the same\n this.clear();\n throw e;\n } finally {\n this.processingEvent = false;\n }\n };\n return Scheduler;\n}();\n\nvar children = /*#__PURE__*/new Map();\nvar sessionIdIndex = 0;\nvar registry = {\n bookId: function bookId() {\n return \"x:\".concat(sessionIdIndex++);\n },\n register: function register(id, actor) {\n children.set(id, actor);\n return id;\n },\n get: function get(id) {\n return children.get(id);\n },\n free: function free(id) {\n children.delete(id);\n }\n};\n\nfunction getGlobal() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global$1 !== 'undefined') {\n return global$1;\n }\n if (!IS_PRODUCTION) {\n console.warn('XState could not find a global object in this environment. Please let the maintainers know and raise an issue here: https://github.com/statelyai/xstate/issues');\n }\n}\nfunction getDevTools() {\n var global = getGlobal();\n if (global && '__xstate__' in global) {\n return global.__xstate__;\n }\n return undefined;\n}\nfunction registerService(service) {\n if (!getGlobal()) {\n return;\n }\n var devTools = getDevTools();\n if (devTools) {\n devTools.register(service);\n }\n}\n\nfunction spawnBehavior(behavior, options) {\n if (options === void 0) {\n options = {};\n }\n var state = behavior.initialState;\n var observers = new Set();\n var mailbox = [];\n var flushing = false;\n var flush = function flush() {\n if (flushing) {\n return;\n }\n flushing = true;\n while (mailbox.length > 0) {\n var event_1 = mailbox.shift();\n state = behavior.transition(state, event_1, actorCtx);\n observers.forEach(function (observer) {\n return observer.next(state);\n });\n }\n flushing = false;\n };\n var actor = toActorRef({\n id: options.id,\n send: function send(event) {\n mailbox.push(event);\n flush();\n },\n getSnapshot: function getSnapshot() {\n return state;\n },\n subscribe: function subscribe(next, handleError, complete) {\n var observer = toObserver(next, handleError, complete);\n observers.add(observer);\n observer.next(state);\n return {\n unsubscribe: function unsubscribe() {\n observers.delete(observer);\n }\n };\n }\n });\n var actorCtx = {\n parent: options.parent,\n self: actor,\n id: options.id || 'anonymous',\n observers: observers\n };\n state = behavior.start ? behavior.start(actorCtx) : state;\n return actor;\n}\n\nvar DEFAULT_SPAWN_OPTIONS = {\n sync: false,\n autoForward: false\n};\nvar InterpreterStatus;\n(function (InterpreterStatus) {\n InterpreterStatus[InterpreterStatus[\"NotStarted\"] = 0] = \"NotStarted\";\n InterpreterStatus[InterpreterStatus[\"Running\"] = 1] = \"Running\";\n InterpreterStatus[InterpreterStatus[\"Stopped\"] = 2] = \"Stopped\";\n})(InterpreterStatus || (InterpreterStatus = {}));\nvar Interpreter = /*#__PURE__*/\n\n/** @class */\nfunction () {\n /**\r\n * Creates a new Interpreter instance (i.e., service) for the given machine with the provided options, if any.\r\n *\r\n * @param machine The machine to be interpreted\r\n * @param options Interpreter options\r\n */\n function Interpreter(machine, options) {\n var _this = this;\n if (options === void 0) {\n options = Interpreter.defaultOptions;\n }\n this.machine = machine;\n this.delayedEventsMap = {};\n this.listeners = new Set();\n this.contextListeners = new Set();\n this.stopListeners = new Set();\n this.doneListeners = new Set();\n this.eventListeners = new Set();\n this.sendListeners = new Set();\n /**\r\n * Whether the service is started.\r\n */\n\n this.initialized = false;\n this.status = InterpreterStatus.NotStarted;\n this.children = new Map();\n this.forwardTo = new Set();\n /**\r\n * Alias for Interpreter.prototype.start\r\n */\n\n this.init = this.start;\n /**\r\n * Sends an event to the running interpreter to trigger a transition.\r\n *\r\n * An array of events (batched) can be sent as well, which will send all\r\n * batched events to the running interpreter. The listeners will be\r\n * notified only **once** when all events are processed.\r\n *\r\n * @param event The event(s) to send\r\n */\n\n this.send = function (event, payload) {\n if (isArray(event)) {\n _this.batch(event);\n return _this.state;\n }\n var _event = toSCXMLEvent(toEventObject(event, payload));\n if (_this.status === InterpreterStatus.Stopped) {\n // do nothing\n if (!IS_PRODUCTION) {\n warn(false, \"Event \\\"\".concat(_event.name, \"\\\" was sent to stopped service \\\"\").concat(_this.machine.id, \"\\\". This service has already reached its final state, and will not transition.\\nEvent: \").concat(JSON.stringify(_event.data)));\n }\n return _this.state;\n }\n if (_this.status !== InterpreterStatus.Running && !_this.options.deferEvents) {\n throw new Error(\"Event \\\"\".concat(_event.name, \"\\\" was sent to uninitialized service \\\"\").concat(_this.machine.id // tslint:disable-next-line:max-line-length\n , \"\\\". Make sure .start() is called for this service, or set { deferEvents: true } in the service options.\\nEvent: \").concat(JSON.stringify(_event.data)));\n }\n _this.scheduler.schedule(function () {\n // Forward copy of event to child actors\n _this.forward(_event);\n var nextState = _this.nextState(_event);\n _this.update(nextState, _event);\n });\n return _this._state; // TODO: deprecate (should return void)\n // tslint:disable-next-line:semicolon\n };\n\n this.sendTo = function (event, to) {\n var isParent = _this.parent && (to === SpecialTargets.Parent || _this.parent.id === to);\n var target = isParent ? _this.parent : isString(to) ? _this.children.get(to) || registry.get(to) : isActor$1(to) ? to : undefined;\n if (!target) {\n if (!isParent) {\n throw new Error(\"Unable to send event to child '\".concat(to, \"' from service '\").concat(_this.id, \"'.\"));\n } // tslint:disable-next-line:no-console\n\n if (!IS_PRODUCTION) {\n warn(false, \"Service '\".concat(_this.id, \"' has no parent: unable to send event \").concat(event.type));\n }\n return;\n }\n if ('machine' in target) {\n // perhaps those events should be rejected in the parent\n // but atm it doesn't have easy access to all of the information that is required to do it reliably\n if (_this.status !== InterpreterStatus.Stopped || _this.parent !== target ||\n // we need to send events to the parent from exit handlers of a machine that reached its final state\n _this.state.done) {\n // Send SCXML events to machines\n target.send(_assign(_assign({}, event), {\n name: event.name === error$1 ? \"\".concat(error(_this.id)) : event.name,\n origin: _this.sessionId\n }));\n }\n } else {\n // Send normal events to other targets\n target.send(event.data);\n }\n };\n this._exec = function (action, context, _event, actionFunctionMap) {\n if (actionFunctionMap === void 0) {\n actionFunctionMap = _this.machine.options.actions;\n }\n var actionOrExec = action.exec || getActionFunction(action.type, actionFunctionMap);\n var exec = isFunction(actionOrExec) ? actionOrExec : actionOrExec ? actionOrExec.exec : action.exec;\n if (exec) {\n try {\n return exec(context, _event.data, !_this.machine.config.predictableActionArguments ? {\n action: action,\n state: _this.state,\n _event: _event\n } : {\n action: action,\n _event: _event\n });\n } catch (err) {\n if (_this.parent) {\n _this.parent.send({\n type: 'xstate.error',\n data: err\n });\n }\n throw err;\n }\n }\n switch (action.type) {\n case send$1:\n var sendAction = action;\n if (typeof sendAction.delay === 'number') {\n _this.defer(sendAction);\n return;\n } else {\n if (sendAction.to) {\n _this.sendTo(sendAction._event, sendAction.to);\n } else {\n _this.send(sendAction._event);\n }\n }\n break;\n case cancel$1:\n _this.cancel(action.sendId);\n break;\n case start$1:\n {\n if (_this.status !== InterpreterStatus.Running) {\n return;\n }\n var activity = action.activity; // If the activity will be stopped right after it's started\n // (such as in transient states)\n // don't bother starting the activity.\n\n if (\n // in v4 with `predictableActionArguments` invokes are called eagerly when the `this.state` still points to the previous state\n !_this.machine.config.predictableActionArguments && !_this.state.activities[activity.id || activity.type]) {\n break;\n } // Invoked services\n\n if (activity.type === ActionTypes.Invoke) {\n var invokeSource = toInvokeSource$1(activity.src);\n var serviceCreator = _this.machine.options.services ? _this.machine.options.services[invokeSource.type] : undefined;\n var id = activity.id,\n data = activity.data;\n if (!IS_PRODUCTION) {\n warn(!('forward' in activity),\n // tslint:disable-next-line:max-line-length\n \"`forward` property is deprecated (found in invocation of '\".concat(activity.src, \"' in in machine '\").concat(_this.machine.id, \"'). \") + \"Please use `autoForward` instead.\");\n }\n var autoForward = 'autoForward' in activity ? activity.autoForward : !!activity.forward;\n if (!serviceCreator) {\n // tslint:disable-next-line:no-console\n if (!IS_PRODUCTION) {\n warn(false, \"No service found for invocation '\".concat(activity.src, \"' in machine '\").concat(_this.machine.id, \"'.\"));\n }\n return;\n }\n var resolvedData = data ? mapContext(data, context, _event) : undefined;\n if (typeof serviceCreator === 'string') {\n // TODO: warn\n return;\n }\n var source = isFunction(serviceCreator) ? serviceCreator(context, _event.data, {\n data: resolvedData,\n src: invokeSource,\n meta: activity.meta\n }) : serviceCreator;\n if (!source) {\n // TODO: warn?\n return;\n }\n var options = void 0;\n if (isMachine(source)) {\n source = resolvedData ? source.withContext(resolvedData) : source;\n options = {\n autoForward: autoForward\n };\n }\n _this.spawn(source, id, options);\n } else {\n _this.spawnActivity(activity);\n }\n break;\n }\n case stop$1:\n {\n _this.stopChild(action.activity.id);\n break;\n }\n case log:\n var label = action.label,\n value = action.value;\n if (label) {\n _this.logger(label, value);\n } else {\n _this.logger(value);\n }\n break;\n default:\n if (!IS_PRODUCTION) {\n warn(false, \"No implementation found for action type '\".concat(action.type, \"'\"));\n }\n break;\n }\n };\n var resolvedOptions = _assign(_assign({}, Interpreter.defaultOptions), options);\n var clock = resolvedOptions.clock,\n logger = resolvedOptions.logger,\n parent = resolvedOptions.parent,\n id = resolvedOptions.id;\n var resolvedId = id !== undefined ? id : machine.id;\n this.id = resolvedId;\n this.logger = logger;\n this.clock = clock;\n this.parent = parent;\n this.options = resolvedOptions;\n this.scheduler = new Scheduler({\n deferEvents: this.options.deferEvents\n });\n this.sessionId = registry.bookId();\n }\n Object.defineProperty(Interpreter.prototype, \"initialState\", {\n get: function get() {\n var _this = this;\n if (this._initialState) {\n return this._initialState;\n }\n return provide(this, function () {\n _this._initialState = _this.machine.initialState;\n return _this._initialState;\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Interpreter.prototype, \"state\", {\n get: function get() {\n if (!IS_PRODUCTION) {\n warn(this.status !== InterpreterStatus.NotStarted, \"Attempted to read state from uninitialized service '\".concat(this.id, \"'. Make sure the service is started first.\"));\n }\n return this._state;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Executes the actions of the given state, with that state's `context` and `event`.\r\n *\r\n * @param state The state whose actions will be executed\r\n * @param actionsConfig The action implementations to use\r\n */\n\n Interpreter.prototype.execute = function (state, actionsConfig) {\n var e_1, _a;\n try {\n for (var _b = __values(state.actions), _c = _b.next(); !_c.done; _c = _b.next()) {\n var action = _c.value;\n this.exec(action, state, actionsConfig);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n };\n Interpreter.prototype.update = function (state, _event) {\n var e_2, _a, e_3, _b, e_4, _c, e_5, _d;\n var _this = this; // Attach session ID to state\n\n state._sessionid = this.sessionId; // Update state\n\n this._state = state; // Execute actions\n\n if ((!this.machine.config.predictableActionArguments ||\n // this is currently required to execute initial actions as the `initialState` gets cached\n // we can't just recompute it (and execute actions while doing so) because we try to preserve identity of actors created within initial assigns\n _event === initEvent) && this.options.execute) {\n this.execute(this.state);\n } // Update children\n\n this.children.forEach(function (child) {\n _this.state.children[child.id] = child;\n }); // Dev tools\n\n if (this.devTools) {\n this.devTools.send(_event.data, state);\n } // Execute listeners\n\n if (state.event) {\n try {\n for (var _e = __values(this.eventListeners), _f = _e.next(); !_f.done; _f = _e.next()) {\n var listener = _f.value;\n listener(state.event);\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_a = _e.return)) _a.call(_e);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n }\n try {\n for (var _g = __values(this.listeners), _h = _g.next(); !_h.done; _h = _g.next()) {\n var listener = _h.value;\n listener(state, state.event);\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n try {\n for (var _j = __values(this.contextListeners), _k = _j.next(); !_k.done; _k = _j.next()) {\n var contextListener = _k.value;\n contextListener(this.state.context, this.state.history ? this.state.history.context : undefined);\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (_k && !_k.done && (_c = _j.return)) _c.call(_j);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n if (this.state.done) {\n // get final child state node\n var finalChildStateNode = state.configuration.find(function (sn) {\n return sn.type === 'final' && sn.parent === _this.machine;\n });\n var doneData = finalChildStateNode && finalChildStateNode.doneData ? mapContext(finalChildStateNode.doneData, state.context, _event) : undefined;\n try {\n for (var _l = __values(this.doneListeners), _m = _l.next(); !_m.done; _m = _l.next()) {\n var listener = _m.value;\n listener(doneInvoke(this.id, doneData));\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (_m && !_m.done && (_d = _l.return)) _d.call(_l);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n this._stop();\n }\n };\n /*\r\n * Adds a listener that is notified whenever a state transition happens. The listener is called with\r\n * the next state and the event object that caused the state transition.\r\n *\r\n * @param listener The state listener\r\n */\n\n Interpreter.prototype.onTransition = function (listener) {\n this.listeners.add(listener); // Send current state to listener\n\n if (this.status === InterpreterStatus.Running) {\n listener(this.state, this.state.event);\n }\n return this;\n };\n Interpreter.prototype.subscribe = function (nextListenerOrObserver, _,\n // TODO: error listener\n completeListener) {\n var _this = this;\n var observer = toObserver(nextListenerOrObserver, _, completeListener);\n this.listeners.add(observer.next); // Send current state to listener\n\n if (this.status !== InterpreterStatus.NotStarted) {\n observer.next(this.state);\n }\n var completeOnce = function completeOnce() {\n _this.doneListeners.delete(completeOnce);\n _this.stopListeners.delete(completeOnce);\n observer.complete();\n };\n if (this.status === InterpreterStatus.Stopped) {\n observer.complete();\n } else {\n this.onDone(completeOnce);\n this.onStop(completeOnce);\n }\n return {\n unsubscribe: function unsubscribe() {\n _this.listeners.delete(observer.next);\n _this.doneListeners.delete(completeOnce);\n _this.stopListeners.delete(completeOnce);\n }\n };\n };\n /**\r\n * Adds an event listener that is notified whenever an event is sent to the running interpreter.\r\n * @param listener The event listener\r\n */\n\n Interpreter.prototype.onEvent = function (listener) {\n this.eventListeners.add(listener);\n return this;\n };\n /**\r\n * Adds an event listener that is notified whenever a `send` event occurs.\r\n * @param listener The event listener\r\n */\n\n Interpreter.prototype.onSend = function (listener) {\n this.sendListeners.add(listener);\n return this;\n };\n /**\r\n * Adds a context listener that is notified whenever the state context changes.\r\n * @param listener The context listener\r\n */\n\n Interpreter.prototype.onChange = function (listener) {\n this.contextListeners.add(listener);\n return this;\n };\n /**\r\n * Adds a listener that is notified when the machine is stopped.\r\n * @param listener The listener\r\n */\n\n Interpreter.prototype.onStop = function (listener) {\n this.stopListeners.add(listener);\n return this;\n };\n /**\r\n * Adds a state listener that is notified when the statechart has reached its final state.\r\n * @param listener The state listener\r\n */\n\n Interpreter.prototype.onDone = function (listener) {\n this.doneListeners.add(listener);\n return this;\n };\n /**\r\n * Removes a listener.\r\n * @param listener The listener to remove\r\n */\n\n Interpreter.prototype.off = function (listener) {\n this.listeners.delete(listener);\n this.eventListeners.delete(listener);\n this.sendListeners.delete(listener);\n this.stopListeners.delete(listener);\n this.doneListeners.delete(listener);\n this.contextListeners.delete(listener);\n return this;\n };\n /**\r\n * Starts the interpreter from the given state, or the initial state.\r\n * @param initialState The state to start the statechart from\r\n */\n\n Interpreter.prototype.start = function (initialState) {\n var _this = this;\n if (this.status === InterpreterStatus.Running) {\n // Do not restart the service if it is already started\n return this;\n } // yes, it's a hack but we need the related cache to be populated for some things to work (like delayed transitions)\n // this is usually called by `machine.getInitialState` but if we rehydrate from a state we might bypass this call\n // we also don't want to call this method here as it resolves the full initial state which might involve calling assign actions\n // and that could potentially lead to some unwanted side-effects (even such as creating some rogue actors)\n\n this.machine._init();\n registry.register(this.sessionId, this);\n this.initialized = true;\n this.status = InterpreterStatus.Running;\n var resolvedState = initialState === undefined ? this.initialState : provide(this, function () {\n return isStateConfig(initialState) ? _this.machine.resolveState(initialState) : _this.machine.resolveState(State.from(initialState, _this.machine.context));\n });\n if (this.options.devTools) {\n this.attachDev();\n }\n this.scheduler.initialize(function () {\n _this.update(resolvedState, initEvent);\n });\n return this;\n };\n Interpreter.prototype._stop = function () {\n var e_6, _a, e_7, _b, e_8, _c, e_9, _d, e_10, _e;\n try {\n for (var _f = __values(this.listeners), _g = _f.next(); !_g.done; _g = _f.next()) {\n var listener = _g.value;\n this.listeners.delete(listener);\n }\n } catch (e_6_1) {\n e_6 = {\n error: e_6_1\n };\n } finally {\n try {\n if (_g && !_g.done && (_a = _f.return)) _a.call(_f);\n } finally {\n if (e_6) throw e_6.error;\n }\n }\n try {\n for (var _h = __values(this.stopListeners), _j = _h.next(); !_j.done; _j = _h.next()) {\n var listener = _j.value; // call listener, then remove\n\n listener();\n this.stopListeners.delete(listener);\n }\n } catch (e_7_1) {\n e_7 = {\n error: e_7_1\n };\n } finally {\n try {\n if (_j && !_j.done && (_b = _h.return)) _b.call(_h);\n } finally {\n if (e_7) throw e_7.error;\n }\n }\n try {\n for (var _k = __values(this.contextListeners), _l = _k.next(); !_l.done; _l = _k.next()) {\n var listener = _l.value;\n this.contextListeners.delete(listener);\n }\n } catch (e_8_1) {\n e_8 = {\n error: e_8_1\n };\n } finally {\n try {\n if (_l && !_l.done && (_c = _k.return)) _c.call(_k);\n } finally {\n if (e_8) throw e_8.error;\n }\n }\n try {\n for (var _m = __values(this.doneListeners), _o = _m.next(); !_o.done; _o = _m.next()) {\n var listener = _o.value;\n this.doneListeners.delete(listener);\n }\n } catch (e_9_1) {\n e_9 = {\n error: e_9_1\n };\n } finally {\n try {\n if (_o && !_o.done && (_d = _m.return)) _d.call(_m);\n } finally {\n if (e_9) throw e_9.error;\n }\n }\n if (!this.initialized) {\n // Interpreter already stopped; do nothing\n return this;\n }\n this.initialized = false;\n this.status = InterpreterStatus.Stopped;\n this._initialState = undefined;\n try {\n // we are going to stop within the current sync frame\n // so we can safely just cancel this here as nothing async should be fired anyway\n for (var _p = __values(Object.keys(this.delayedEventsMap)), _q = _p.next(); !_q.done; _q = _p.next()) {\n var key = _q.value;\n this.clock.clearTimeout(this.delayedEventsMap[key]);\n }\n } catch (e_10_1) {\n e_10 = {\n error: e_10_1\n };\n } finally {\n try {\n if (_q && !_q.done && (_e = _p.return)) _e.call(_p);\n } finally {\n if (e_10) throw e_10.error;\n }\n } // clear everything that might be enqueued\n\n this.scheduler.clear();\n this.scheduler = new Scheduler({\n deferEvents: this.options.deferEvents\n });\n };\n /**\r\n * Stops the interpreter and unsubscribe all listeners.\r\n *\r\n * This will also notify the `onStop` listeners.\r\n */\n\n Interpreter.prototype.stop = function () {\n // TODO: add warning for stopping non-root interpreters\n var _this = this; // grab the current scheduler as it will be replaced in _stop\n\n var scheduler = this.scheduler;\n this._stop(); // let what is currently processed to be finished\n\n scheduler.schedule(function () {\n // it feels weird to handle this here but we need to handle this even slightly \"out of band\"\n var _event = toSCXMLEvent({\n type: 'xstate.stop'\n });\n var nextState = provide(_this, function () {\n var exitActions = flatten(__spreadArray([], __read(_this.state.configuration), false).sort(function (a, b) {\n return b.order - a.order;\n }).map(function (stateNode) {\n return toActionObjects(stateNode.onExit, _this.machine.options.actions);\n }));\n var _a = __read(resolveActions(_this.machine, _this.state, _this.state.context, _event, exitActions, _this.machine.config.predictableActionArguments ? _this._exec : undefined, _this.machine.config.predictableActionArguments || _this.machine.config.preserveActionOrder), 2),\n resolvedActions = _a[0],\n updatedContext = _a[1];\n var newState = new State({\n value: _this.state.value,\n context: updatedContext,\n _event: _event,\n _sessionid: _this.sessionId,\n historyValue: undefined,\n history: _this.state,\n actions: resolvedActions.filter(function (action) {\n return action.type !== raise$1 && (action.type !== send$1 || !!action.to && action.to !== SpecialTargets.Internal);\n }),\n activities: {},\n events: [],\n configuration: [],\n transitions: [],\n children: {},\n done: _this.state.done,\n tags: _this.state.tags,\n machine: _this.machine\n });\n newState.changed = true;\n return newState;\n });\n _this.update(nextState, _event); // TODO: think about converting those to actions\n // Stop all children\n\n _this.children.forEach(function (child) {\n if (isFunction(child.stop)) {\n child.stop();\n }\n });\n _this.children.clear();\n registry.free(_this.sessionId);\n });\n return this;\n };\n Interpreter.prototype.batch = function (events) {\n var _this = this;\n if (this.status === InterpreterStatus.NotStarted && this.options.deferEvents) {\n // tslint:disable-next-line:no-console\n if (!IS_PRODUCTION) {\n warn(false, \"\".concat(events.length, \" event(s) were sent to uninitialized service \\\"\").concat(this.machine.id, \"\\\" and are deferred. Make sure .start() is called for this service.\\nEvent: \").concat(JSON.stringify(event)));\n }\n } else if (this.status !== InterpreterStatus.Running) {\n throw new Error(\n // tslint:disable-next-line:max-line-length\n \"\".concat(events.length, \" event(s) were sent to uninitialized service \\\"\").concat(this.machine.id, \"\\\". Make sure .start() is called for this service, or set { deferEvents: true } in the service options.\"));\n }\n this.scheduler.schedule(function () {\n var e_11, _a;\n var nextState = _this.state;\n var batchChanged = false;\n var batchedActions = [];\n var _loop_1 = function _loop_1(event_1) {\n var _event = toSCXMLEvent(event_1);\n _this.forward(_event);\n nextState = provide(_this, function () {\n return _this.machine.transition(nextState, _event);\n });\n batchedActions.push.apply(batchedActions, __spreadArray([], __read(nextState.actions.map(function (a) {\n return bindActionToState(a, nextState);\n })), false));\n batchChanged = batchChanged || !!nextState.changed;\n };\n try {\n for (var events_1 = __values(events), events_1_1 = events_1.next(); !events_1_1.done; events_1_1 = events_1.next()) {\n var event_1 = events_1_1.value;\n _loop_1(event_1);\n }\n } catch (e_11_1) {\n e_11 = {\n error: e_11_1\n };\n } finally {\n try {\n if (events_1_1 && !events_1_1.done && (_a = events_1.return)) _a.call(events_1);\n } finally {\n if (e_11) throw e_11.error;\n }\n }\n nextState.changed = batchChanged;\n nextState.actions = batchedActions;\n _this.update(nextState, toSCXMLEvent(events[events.length - 1]));\n });\n };\n /**\r\n * Returns a send function bound to this interpreter instance.\r\n *\r\n * @param event The event to be sent by the sender.\r\n */\n\n Interpreter.prototype.sender = function (event) {\n return this.send.bind(this, event);\n };\n Interpreter.prototype._nextState = function (event) {\n var _this = this;\n var _event = toSCXMLEvent(event);\n if (_event.name.indexOf(errorPlatform) === 0 && !this.state.nextEvents.some(function (nextEvent) {\n return nextEvent.indexOf(errorPlatform) === 0;\n })) {\n throw _event.data.data;\n }\n var nextState = provide(this, function () {\n return _this.machine.transition(_this.state, _event, undefined, _this.machine.config.predictableActionArguments ? _this._exec : undefined);\n });\n return nextState;\n };\n /**\r\n * Returns the next state given the interpreter's current state and the event.\r\n *\r\n * This is a pure method that does _not_ update the interpreter's state.\r\n *\r\n * @param event The event to determine the next state\r\n */\n\n Interpreter.prototype.nextState = function (event) {\n return this._nextState(event);\n };\n Interpreter.prototype.forward = function (event) {\n var e_12, _a;\n try {\n for (var _b = __values(this.forwardTo), _c = _b.next(); !_c.done; _c = _b.next()) {\n var id = _c.value;\n var child = this.children.get(id);\n if (!child) {\n throw new Error(\"Unable to forward event '\".concat(event, \"' from interpreter '\").concat(this.id, \"' to nonexistant child '\").concat(id, \"'.\"));\n }\n child.send(event);\n }\n } catch (e_12_1) {\n e_12 = {\n error: e_12_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_12) throw e_12.error;\n }\n }\n };\n Interpreter.prototype.defer = function (sendAction) {\n var _this = this;\n this.delayedEventsMap[sendAction.id] = this.clock.setTimeout(function () {\n if (sendAction.to) {\n _this.sendTo(sendAction._event, sendAction.to);\n } else {\n _this.send(sendAction._event);\n }\n }, sendAction.delay);\n };\n Interpreter.prototype.cancel = function (sendId) {\n this.clock.clearTimeout(this.delayedEventsMap[sendId]);\n delete this.delayedEventsMap[sendId];\n };\n Interpreter.prototype.exec = function (action, state, actionFunctionMap) {\n if (actionFunctionMap === void 0) {\n actionFunctionMap = this.machine.options.actions;\n }\n this._exec(action, state.context, state._event, actionFunctionMap);\n };\n Interpreter.prototype.removeChild = function (childId) {\n var _a;\n this.children.delete(childId);\n this.forwardTo.delete(childId); // this.state might not exist at the time this is called,\n // such as when a child is added then removed while initializing the state\n\n (_a = this.state) === null || _a === void 0 ? true : delete _a.children[childId];\n };\n Interpreter.prototype.stopChild = function (childId) {\n var child = this.children.get(childId);\n if (!child) {\n return;\n }\n this.removeChild(childId);\n if (isFunction(child.stop)) {\n child.stop();\n }\n };\n Interpreter.prototype.spawn = function (entity, name, options) {\n if (this.status !== InterpreterStatus.Running) {\n return createDeferredActor(entity, name);\n }\n if (isPromiseLike(entity)) {\n return this.spawnPromise(Promise.resolve(entity), name);\n } else if (isFunction(entity)) {\n return this.spawnCallback(entity, name);\n } else if (isSpawnedActor(entity)) {\n return this.spawnActor(entity, name);\n } else if (isObservable(entity)) {\n return this.spawnObservable(entity, name);\n } else if (isMachine(entity)) {\n return this.spawnMachine(entity, _assign(_assign({}, options), {\n id: name\n }));\n } else if (isBehavior(entity)) {\n return this.spawnBehavior(entity, name);\n } else {\n throw new Error(\"Unable to spawn entity \\\"\".concat(name, \"\\\" of type \\\"\").concat(typeof entity, \"\\\".\"));\n }\n };\n Interpreter.prototype.spawnMachine = function (machine, options) {\n var _this = this;\n if (options === void 0) {\n options = {};\n }\n var childService = new Interpreter(machine, _assign(_assign({}, this.options), {\n parent: this,\n id: options.id || machine.id\n }));\n var resolvedOptions = _assign(_assign({}, DEFAULT_SPAWN_OPTIONS), options);\n if (resolvedOptions.sync) {\n childService.onTransition(function (state) {\n _this.send(update, {\n state: state,\n id: childService.id\n });\n });\n }\n var actor = childService;\n this.children.set(childService.id, actor);\n if (resolvedOptions.autoForward) {\n this.forwardTo.add(childService.id);\n }\n childService.onDone(function (doneEvent) {\n _this.removeChild(childService.id);\n _this.send(toSCXMLEvent(doneEvent, {\n origin: childService.id\n }));\n }).start();\n return actor;\n };\n Interpreter.prototype.spawnBehavior = function (behavior, id) {\n var actorRef = spawnBehavior(behavior, {\n id: id,\n parent: this\n });\n this.children.set(id, actorRef);\n return actorRef;\n };\n Interpreter.prototype.spawnPromise = function (promise, id) {\n var _a;\n var _this = this;\n var canceled = false;\n var resolvedData;\n promise.then(function (response) {\n if (!canceled) {\n resolvedData = response;\n _this.removeChild(id);\n _this.send(toSCXMLEvent(doneInvoke(id, response), {\n origin: id\n }));\n }\n }, function (errorData) {\n if (!canceled) {\n _this.removeChild(id);\n var errorEvent = error(id, errorData);\n try {\n // Send \"error.platform.id\" to this (parent).\n _this.send(toSCXMLEvent(errorEvent, {\n origin: id\n }));\n } catch (error) {\n reportUnhandledExceptionOnInvocation(errorData, error, id);\n if (_this.devTools) {\n _this.devTools.send(errorEvent, _this.state);\n }\n if (_this.machine.strict) {\n // it would be better to always stop the state machine if unhandled\n // exception/promise rejection happens but because we don't want to\n // break existing code so enforce it on strict mode only especially so\n // because documentation says that onError is optional\n _this.stop();\n }\n }\n }\n });\n var actor = (_a = {\n id: id,\n send: function send() {\n return void 0;\n },\n subscribe: function subscribe(next, handleError, complete) {\n var observer = toObserver(next, handleError, complete);\n var unsubscribed = false;\n promise.then(function (response) {\n if (unsubscribed) {\n return;\n }\n observer.next(response);\n if (unsubscribed) {\n return;\n }\n observer.complete();\n }, function (err) {\n if (unsubscribed) {\n return;\n }\n observer.error(err);\n });\n return {\n unsubscribe: function unsubscribe() {\n return unsubscribed = true;\n }\n };\n },\n stop: function stop() {\n canceled = true;\n },\n toJSON: function toJSON() {\n return {\n id: id\n };\n },\n getSnapshot: function getSnapshot() {\n return resolvedData;\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a);\n this.children.set(id, actor);\n return actor;\n };\n Interpreter.prototype.spawnCallback = function (callback, id) {\n var _a;\n var _this = this;\n var canceled = false;\n var receivers = new Set();\n var listeners = new Set();\n var emitted;\n var receive = function receive(e) {\n emitted = e;\n listeners.forEach(function (listener) {\n return listener(e);\n });\n if (canceled) {\n return;\n }\n _this.send(toSCXMLEvent(e, {\n origin: id\n }));\n };\n var callbackStop;\n try {\n callbackStop = callback(receive, function (newListener) {\n receivers.add(newListener);\n });\n } catch (err) {\n this.send(error(id, err));\n }\n if (isPromiseLike(callbackStop)) {\n // it turned out to be an async function, can't reliably check this before calling `callback`\n // because transpiled async functions are not recognizable\n return this.spawnPromise(callbackStop, id);\n }\n var actor = (_a = {\n id: id,\n send: function send(event) {\n return receivers.forEach(function (receiver) {\n return receiver(event);\n });\n },\n subscribe: function subscribe(next) {\n var observer = toObserver(next);\n listeners.add(observer.next);\n return {\n unsubscribe: function unsubscribe() {\n listeners.delete(observer.next);\n }\n };\n },\n stop: function stop() {\n canceled = true;\n if (isFunction(callbackStop)) {\n callbackStop();\n }\n },\n toJSON: function toJSON() {\n return {\n id: id\n };\n },\n getSnapshot: function getSnapshot() {\n return emitted;\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a);\n this.children.set(id, actor);\n return actor;\n };\n Interpreter.prototype.spawnObservable = function (source, id) {\n var _a;\n var _this = this;\n var emitted;\n var subscription = source.subscribe(function (value) {\n emitted = value;\n _this.send(toSCXMLEvent(value, {\n origin: id\n }));\n }, function (err) {\n _this.removeChild(id);\n _this.send(toSCXMLEvent(error(id, err), {\n origin: id\n }));\n }, function () {\n _this.removeChild(id);\n _this.send(toSCXMLEvent(doneInvoke(id), {\n origin: id\n }));\n });\n var actor = (_a = {\n id: id,\n send: function send() {\n return void 0;\n },\n subscribe: function subscribe(next, handleError, complete) {\n return source.subscribe(next, handleError, complete);\n },\n stop: function stop() {\n return subscription.unsubscribe();\n },\n getSnapshot: function getSnapshot() {\n return emitted;\n },\n toJSON: function toJSON() {\n return {\n id: id\n };\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a);\n this.children.set(id, actor);\n return actor;\n };\n Interpreter.prototype.spawnActor = function (actor, name) {\n this.children.set(name, actor);\n return actor;\n };\n Interpreter.prototype.spawnActivity = function (activity) {\n var implementation = this.machine.options && this.machine.options.activities ? this.machine.options.activities[activity.type] : undefined;\n if (!implementation) {\n if (!IS_PRODUCTION) {\n warn(false, \"No implementation found for activity '\".concat(activity.type, \"'\"));\n } // tslint:disable-next-line:no-console\n\n return;\n } // Start implementation\n\n var dispose = implementation(this.state.context, activity);\n this.spawnEffect(activity.id, dispose);\n };\n Interpreter.prototype.spawnEffect = function (id, dispose) {\n var _a;\n this.children.set(id, (_a = {\n id: id,\n send: function send() {\n return void 0;\n },\n subscribe: function subscribe() {\n return {\n unsubscribe: function unsubscribe() {\n return void 0;\n }\n };\n },\n stop: dispose || undefined,\n getSnapshot: function getSnapshot() {\n return undefined;\n },\n toJSON: function toJSON() {\n return {\n id: id\n };\n }\n }, _a[symbolObservable] = function () {\n return this;\n }, _a));\n };\n Interpreter.prototype.attachDev = function () {\n var global = getGlobal();\n if (this.options.devTools && global) {\n if (global.__REDUX_DEVTOOLS_EXTENSION__) {\n var devToolsOptions = typeof this.options.devTools === 'object' ? this.options.devTools : undefined;\n this.devTools = global.__REDUX_DEVTOOLS_EXTENSION__.connect(_assign(_assign({\n name: this.id,\n autoPause: true,\n stateSanitizer: function stateSanitizer(state) {\n return {\n value: state.value,\n context: state.context,\n actions: state.actions\n };\n }\n }, devToolsOptions), {\n features: _assign({\n jump: false,\n skip: false\n }, devToolsOptions ? devToolsOptions.features : undefined)\n }), this.machine);\n this.devTools.init(this.state);\n } // add XState-specific dev tooling hook\n\n registerService(this);\n }\n };\n Interpreter.prototype.toJSON = function () {\n return {\n id: this.id\n };\n };\n Interpreter.prototype[symbolObservable] = function () {\n return this;\n };\n Interpreter.prototype.getSnapshot = function () {\n if (this.status === InterpreterStatus.NotStarted) {\n return this.initialState;\n }\n return this._state;\n };\n /**\r\n * The default interpreter options:\r\n *\r\n * - `clock` uses the global `setTimeout` and `clearTimeout` functions\r\n * - `logger` uses the global `console.log()` method\r\n */\n\n Interpreter.defaultOptions = {\n execute: true,\n deferEvents: true,\n clock: {\n setTimeout: function (_setTimeout) {\n function setTimeout(_x, _x2) {\n return _setTimeout.apply(this, arguments);\n }\n setTimeout.toString = function () {\n return _setTimeout.toString();\n };\n return setTimeout;\n }(function (fn, ms) {\n return setTimeout(fn, ms);\n }),\n clearTimeout: function (_clearTimeout) {\n function clearTimeout(_x3) {\n return _clearTimeout.apply(this, arguments);\n }\n clearTimeout.toString = function () {\n return _clearTimeout.toString();\n };\n return clearTimeout;\n }(function (id) {\n return clearTimeout(id);\n })\n },\n logger: /*#__PURE__*/console.log.bind(console),\n devTools: false\n };\n Interpreter.interpret = interpret;\n return Interpreter;\n}();\n/**\r\n * Creates a new Interpreter instance for the given machine with the provided options, if any.\r\n *\r\n * @param machine The machine to interpret\r\n * @param options Interpreter options\r\n */\n\nfunction interpret(machine, options) {\n var interpreter = new Interpreter(machine, options);\n return interpreter;\n}\n\nfunction toInvokeSource(src) {\n if (typeof src === 'string') {\n var simpleSrc = {\n type: src\n };\n simpleSrc.toString = function () {\n return src;\n }; // v4 compat - TODO: remove in v5\n\n return simpleSrc;\n }\n return src;\n}\nfunction toInvokeDefinition(invokeConfig) {\n return _assign(_assign({\n type: invoke\n }, invokeConfig), {\n toJSON: function toJSON() {\n invokeConfig.onDone;\n invokeConfig.onError;\n var invokeDef = __rest(invokeConfig, [\"onDone\", \"onError\"]);\n return _assign(_assign({}, invokeDef), {\n type: invoke,\n src: toInvokeSource(invokeConfig.src)\n });\n }\n });\n}\n\nvar NULL_EVENT = '';\nvar STATE_IDENTIFIER = '#';\nvar WILDCARD = '*';\nvar EMPTY_OBJECT = {};\nvar isStateId = function isStateId(str) {\n return str[0] === STATE_IDENTIFIER;\n};\nvar createDefaultOptions = function createDefaultOptions() {\n return {\n actions: {},\n guards: {},\n services: {},\n activities: {},\n delays: {}\n };\n};\nvar validateArrayifiedTransitions = function validateArrayifiedTransitions(stateNode, event, transitions) {\n var hasNonLastUnguardedTarget = transitions.slice(0, -1).some(function (transition) {\n return !('cond' in transition) && !('in' in transition) && (isString(transition.target) || isMachine(transition.target));\n });\n var eventText = event === NULL_EVENT ? 'the transient event' : \"event '\".concat(event, \"'\");\n warn(!hasNonLastUnguardedTarget, \"One or more transitions for \".concat(eventText, \" on state '\").concat(stateNode.id, \"' are unreachable. \") + \"Make sure that the default transition is the last one defined.\");\n};\nvar StateNode = /*#__PURE__*/\n\n/** @class */\nfunction () {\n function StateNode(\n /**\r\n * The raw config used to create the machine.\r\n */\n config, options,\n /**\r\n * The initial extended state\r\n */\n _context,\n // TODO: this is unsafe, but we're removing it in v5 anyway\n _stateInfo) {\n var _this = this;\n if (_context === void 0) {\n _context = 'context' in config ? config.context : undefined;\n }\n var _a;\n this.config = config;\n this._context = _context;\n /**\r\n * The order this state node appears. Corresponds to the implicit SCXML document order.\r\n */\n\n this.order = -1;\n this.__xstatenode = true;\n this.__cache = {\n events: undefined,\n relativeValue: new Map(),\n initialStateValue: undefined,\n initialState: undefined,\n on: undefined,\n transitions: undefined,\n candidates: {},\n delayedTransitions: undefined\n };\n this.idMap = {};\n this.tags = [];\n this.options = Object.assign(createDefaultOptions(), options);\n this.parent = _stateInfo === null || _stateInfo === void 0 ? void 0 : _stateInfo.parent;\n this.key = this.config.key || (_stateInfo === null || _stateInfo === void 0 ? void 0 : _stateInfo.key) || this.config.id || '(machine)';\n this.machine = this.parent ? this.parent.machine : this;\n this.path = this.parent ? this.parent.path.concat(this.key) : [];\n this.delimiter = this.config.delimiter || (this.parent ? this.parent.delimiter : STATE_DELIMITER);\n this.id = this.config.id || __spreadArray([this.machine.key], __read(this.path), false).join(this.delimiter);\n this.version = this.parent ? this.parent.version : this.config.version;\n this.type = this.config.type || (this.config.parallel ? 'parallel' : this.config.states && Object.keys(this.config.states).length ? 'compound' : this.config.history ? 'history' : 'atomic');\n this.schema = this.parent ? this.machine.schema : (_a = this.config.schema) !== null && _a !== void 0 ? _a : {};\n this.description = this.config.description;\n if (!IS_PRODUCTION) {\n warn(!('parallel' in this.config), \"The \\\"parallel\\\" property is deprecated and will be removed in version 4.1. \".concat(this.config.parallel ? \"Replace with `type: 'parallel'`\" : \"Use `type: '\".concat(this.type, \"'`\"), \" in the config for state node '\").concat(this.id, \"' instead.\"));\n }\n this.initial = this.config.initial;\n this.states = this.config.states ? mapValues(this.config.states, function (stateConfig, key) {\n var _a;\n var stateNode = new StateNode(stateConfig, {}, undefined, {\n parent: _this,\n key: key\n });\n Object.assign(_this.idMap, _assign((_a = {}, _a[stateNode.id] = stateNode, _a), stateNode.idMap));\n return stateNode;\n }) : EMPTY_OBJECT; // Document order\n\n var order = 0;\n function dfs(stateNode) {\n var e_1, _a;\n stateNode.order = order++;\n try {\n for (var _b = __values(getAllChildren(stateNode)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var child = _c.value;\n dfs(child);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n }\n dfs(this); // History config\n\n this.history = this.config.history === true ? 'shallow' : this.config.history || false;\n this._transient = !!this.config.always || (!this.config.on ? false : Array.isArray(this.config.on) ? this.config.on.some(function (_a) {\n var event = _a.event;\n return event === NULL_EVENT;\n }) : NULL_EVENT in this.config.on);\n this.strict = !!this.config.strict; // TODO: deprecate (entry)\n\n this.onEntry = toArray(this.config.entry || this.config.onEntry).map(function (action) {\n return toActionObject(action);\n }); // TODO: deprecate (exit)\n\n this.onExit = toArray(this.config.exit || this.config.onExit).map(function (action) {\n return toActionObject(action);\n });\n this.meta = this.config.meta;\n this.doneData = this.type === 'final' ? this.config.data : undefined;\n this.invoke = toArray(this.config.invoke).map(function (invokeConfig, i) {\n var _a, _b;\n if (isMachine(invokeConfig)) {\n var invokeId = createInvokeId(_this.id, i);\n _this.machine.options.services = _assign((_a = {}, _a[invokeId] = invokeConfig, _a), _this.machine.options.services);\n return toInvokeDefinition({\n src: invokeId,\n id: invokeId\n });\n } else if (isString(invokeConfig.src)) {\n var invokeId = invokeConfig.id || createInvokeId(_this.id, i);\n return toInvokeDefinition(_assign(_assign({}, invokeConfig), {\n id: invokeId,\n src: invokeConfig.src\n }));\n } else if (isMachine(invokeConfig.src) || isFunction(invokeConfig.src)) {\n var invokeId = invokeConfig.id || createInvokeId(_this.id, i);\n _this.machine.options.services = _assign((_b = {}, _b[invokeId] = invokeConfig.src, _b), _this.machine.options.services);\n return toInvokeDefinition(_assign(_assign({\n id: invokeId\n }, invokeConfig), {\n src: invokeId\n }));\n } else {\n var invokeSource = invokeConfig.src;\n return toInvokeDefinition(_assign(_assign({\n id: createInvokeId(_this.id, i)\n }, invokeConfig), {\n src: invokeSource\n }));\n }\n });\n this.activities = toArray(this.config.activities).concat(this.invoke).map(function (activity) {\n return toActivityDefinition(activity);\n });\n this.transition = this.transition.bind(this);\n this.tags = toArray(this.config.tags); // TODO: this is the real fix for initialization once\n // state node getters are deprecated\n // if (!this.parent) {\n // this._init();\n // }\n }\n\n StateNode.prototype._init = function () {\n if (this.__cache.transitions) {\n return;\n }\n getAllStateNodes(this).forEach(function (stateNode) {\n return stateNode.on;\n });\n };\n /**\r\n * Clones this state machine with custom options and context.\r\n *\r\n * @param options Options (actions, guards, activities, services) to recursively merge with the existing options.\r\n * @param context Custom context (will override predefined context)\r\n */\n\n StateNode.prototype.withConfig = function (options, context) {\n var _a = this.options,\n actions = _a.actions,\n activities = _a.activities,\n guards = _a.guards,\n services = _a.services,\n delays = _a.delays;\n return new StateNode(this.config, {\n actions: _assign(_assign({}, actions), options.actions),\n activities: _assign(_assign({}, activities), options.activities),\n guards: _assign(_assign({}, guards), options.guards),\n services: _assign(_assign({}, services), options.services),\n delays: _assign(_assign({}, delays), options.delays)\n }, context !== null && context !== void 0 ? context : this.context);\n };\n /**\r\n * Clones this state machine with custom context.\r\n *\r\n * @param context Custom context (will override predefined context, not recursive)\r\n */\n\n StateNode.prototype.withContext = function (context) {\n return new StateNode(this.config, this.options, context);\n };\n Object.defineProperty(StateNode.prototype, \"context\", {\n get: function get() {\n return isFunction(this._context) ? this._context() : this._context;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"definition\", {\n /**\r\n * The well-structured state node definition.\r\n */\n get: function get() {\n return {\n id: this.id,\n key: this.key,\n version: this.version,\n context: this.context,\n type: this.type,\n initial: this.initial,\n history: this.history,\n states: mapValues(this.states, function (state) {\n return state.definition;\n }),\n on: this.on,\n transitions: this.transitions,\n entry: this.onEntry,\n exit: this.onExit,\n activities: this.activities || [],\n meta: this.meta,\n order: this.order || -1,\n data: this.doneData,\n invoke: this.invoke,\n description: this.description,\n tags: this.tags\n };\n },\n enumerable: false,\n configurable: true\n });\n StateNode.prototype.toJSON = function () {\n return this.definition;\n };\n Object.defineProperty(StateNode.prototype, \"on\", {\n /**\r\n * The mapping of events to transitions.\r\n */\n get: function get() {\n if (this.__cache.on) {\n return this.__cache.on;\n }\n var transitions = this.transitions;\n return this.__cache.on = transitions.reduce(function (map, transition) {\n map[transition.eventType] = map[transition.eventType] || [];\n map[transition.eventType].push(transition);\n return map;\n }, {});\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"after\", {\n get: function get() {\n return this.__cache.delayedTransitions || (this.__cache.delayedTransitions = this.getDelayedTransitions(), this.__cache.delayedTransitions);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"transitions\", {\n /**\r\n * All the transitions that can be taken from this state node.\r\n */\n get: function get() {\n return this.__cache.transitions || (this.__cache.transitions = this.formatTransitions(), this.__cache.transitions);\n },\n enumerable: false,\n configurable: true\n });\n StateNode.prototype.getCandidates = function (eventName) {\n if (this.__cache.candidates[eventName]) {\n return this.__cache.candidates[eventName];\n }\n var transient = eventName === NULL_EVENT;\n var candidates = this.transitions.filter(function (transition) {\n var sameEventType = transition.eventType === eventName; // null events should only match against eventless transitions\n\n return transient ? sameEventType : sameEventType || transition.eventType === WILDCARD;\n });\n this.__cache.candidates[eventName] = candidates;\n return candidates;\n };\n /**\r\n * All delayed transitions from the config.\r\n */\n\n StateNode.prototype.getDelayedTransitions = function () {\n var _this = this;\n var afterConfig = this.config.after;\n if (!afterConfig) {\n return [];\n }\n var mutateEntryExit = function mutateEntryExit(delay, i) {\n var delayRef = isFunction(delay) ? \"\".concat(_this.id, \":delay[\").concat(i, \"]\") : delay;\n var eventType = after(delayRef, _this.id);\n _this.onEntry.push(send(eventType, {\n delay: delay\n }));\n _this.onExit.push(cancel(eventType));\n return eventType;\n };\n var delayedTransitions = isArray(afterConfig) ? afterConfig.map(function (transition, i) {\n var eventType = mutateEntryExit(transition.delay, i);\n return _assign(_assign({}, transition), {\n event: eventType\n });\n }) : flatten(Object.keys(afterConfig).map(function (delay, i) {\n var configTransition = afterConfig[delay];\n var resolvedTransition = isString(configTransition) ? {\n target: configTransition\n } : configTransition;\n var resolvedDelay = !isNaN(+delay) ? +delay : delay;\n var eventType = mutateEntryExit(resolvedDelay, i);\n return toArray(resolvedTransition).map(function (transition) {\n return _assign(_assign({}, transition), {\n event: eventType,\n delay: resolvedDelay\n });\n });\n }));\n return delayedTransitions.map(function (delayedTransition) {\n var delay = delayedTransition.delay;\n return _assign(_assign({}, _this.formatTransition(delayedTransition)), {\n delay: delay\n });\n });\n };\n /**\r\n * Returns the state nodes represented by the current state value.\r\n *\r\n * @param state The state value or State instance\r\n */\n\n StateNode.prototype.getStateNodes = function (state) {\n var _a;\n var _this = this;\n if (!state) {\n return [];\n }\n var stateValue = state instanceof State ? state.value : toStateValue(state, this.delimiter);\n if (isString(stateValue)) {\n var initialStateValue = this.getStateNode(stateValue).initial;\n return initialStateValue !== undefined ? this.getStateNodes((_a = {}, _a[stateValue] = initialStateValue, _a)) : [this, this.states[stateValue]];\n }\n var subStateKeys = Object.keys(stateValue);\n var subStateNodes = [this];\n subStateNodes.push.apply(subStateNodes, __spreadArray([], __read(flatten(subStateKeys.map(function (subStateKey) {\n return _this.getStateNode(subStateKey).getStateNodes(stateValue[subStateKey]);\n }))), false));\n return subStateNodes;\n };\n /**\r\n * Returns `true` if this state node explicitly handles the given event.\r\n *\r\n * @param event The event in question\r\n */\n\n StateNode.prototype.handles = function (event) {\n var eventType = getEventType(event);\n return this.events.includes(eventType);\n };\n /**\r\n * Resolves the given `state` to a new `State` instance relative to this machine.\r\n *\r\n * This ensures that `.events` and `.nextEvents` represent the correct values.\r\n *\r\n * @param state The state to resolve\r\n */\n\n StateNode.prototype.resolveState = function (state) {\n var stateFromConfig = state instanceof State ? state : State.create(state);\n var configuration = Array.from(getConfiguration([], this.getStateNodes(stateFromConfig.value)));\n return new State(_assign(_assign({}, stateFromConfig), {\n value: this.resolve(stateFromConfig.value),\n configuration: configuration,\n done: isInFinalState(configuration, this),\n tags: getTagsFromConfiguration(configuration),\n machine: this.machine\n }));\n };\n StateNode.prototype.transitionLeafNode = function (stateValue, state, _event) {\n var stateNode = this.getStateNode(stateValue);\n var next = stateNode.next(state, _event);\n if (!next || !next.transitions.length) {\n return this.next(state, _event);\n }\n return next;\n };\n StateNode.prototype.transitionCompoundNode = function (stateValue, state, _event) {\n var subStateKeys = Object.keys(stateValue);\n var stateNode = this.getStateNode(subStateKeys[0]);\n var next = stateNode._transition(stateValue[subStateKeys[0]], state, _event);\n if (!next || !next.transitions.length) {\n return this.next(state, _event);\n }\n return next;\n };\n StateNode.prototype.transitionParallelNode = function (stateValue, state, _event) {\n var e_2, _a;\n var transitionMap = {};\n try {\n for (var _b = __values(Object.keys(stateValue)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var subStateKey = _c.value;\n var subStateValue = stateValue[subStateKey];\n if (!subStateValue) {\n continue;\n }\n var subStateNode = this.getStateNode(subStateKey);\n var next = subStateNode._transition(subStateValue, state, _event);\n if (next) {\n transitionMap[subStateKey] = next;\n }\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n var stateTransitions = Object.keys(transitionMap).map(function (key) {\n return transitionMap[key];\n });\n var enabledTransitions = flatten(stateTransitions.map(function (st) {\n return st.transitions;\n }));\n var willTransition = stateTransitions.some(function (st) {\n return st.transitions.length > 0;\n });\n if (!willTransition) {\n return this.next(state, _event);\n }\n var entryNodes = flatten(stateTransitions.map(function (t) {\n return t.entrySet;\n }));\n var configuration = flatten(Object.keys(transitionMap).map(function (key) {\n return transitionMap[key].configuration;\n }));\n return {\n transitions: enabledTransitions,\n entrySet: entryNodes,\n exitSet: flatten(stateTransitions.map(function (t) {\n return t.exitSet;\n })),\n configuration: configuration,\n source: state,\n actions: flatten(Object.keys(transitionMap).map(function (key) {\n return transitionMap[key].actions;\n }))\n };\n };\n StateNode.prototype._transition = function (stateValue, state, _event) {\n // leaf node\n if (isString(stateValue)) {\n return this.transitionLeafNode(stateValue, state, _event);\n } // hierarchical node\n\n if (Object.keys(stateValue).length === 1) {\n return this.transitionCompoundNode(stateValue, state, _event);\n } // orthogonal node\n\n return this.transitionParallelNode(stateValue, state, _event);\n };\n StateNode.prototype.getTransitionData = function (state, event) {\n return this._transition(state.value, state, toSCXMLEvent(event));\n };\n StateNode.prototype.next = function (state, _event) {\n var e_3, _a;\n var _this = this;\n var eventName = _event.name;\n var actions = [];\n var nextStateNodes = [];\n var selectedTransition;\n try {\n for (var _b = __values(this.getCandidates(eventName)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var candidate = _c.value;\n var cond = candidate.cond,\n stateIn = candidate.in;\n var resolvedContext = state.context;\n var isInState = stateIn ? isString(stateIn) && isStateId(stateIn) ?\n // Check if in state by ID\n state.matches(toStateValue(this.getStateNodeById(stateIn).path, this.delimiter)) :\n // Check if in state by relative grandparent\n matchesState(toStateValue(stateIn, this.delimiter), path(this.path.slice(0, -2))(state.value)) : true;\n var guardPassed = false;\n try {\n guardPassed = !cond || evaluateGuard(this.machine, cond, resolvedContext, _event, state);\n } catch (err) {\n throw new Error(\"Unable to evaluate guard '\".concat(cond.name || cond.type, \"' in transition for event '\").concat(eventName, \"' in state node '\").concat(this.id, \"':\\n\").concat(err.message));\n }\n if (guardPassed && isInState) {\n if (candidate.target !== undefined) {\n nextStateNodes = candidate.target;\n }\n actions.push.apply(actions, __spreadArray([], __read(candidate.actions), false));\n selectedTransition = candidate;\n break;\n }\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n if (!selectedTransition) {\n return undefined;\n }\n if (!nextStateNodes.length) {\n return {\n transitions: [selectedTransition],\n entrySet: [],\n exitSet: [],\n configuration: state.value ? [this] : [],\n source: state,\n actions: actions\n };\n }\n var allNextStateNodes = flatten(nextStateNodes.map(function (stateNode) {\n return _this.getRelativeStateNodes(stateNode, state.historyValue);\n }));\n var isInternal = !!selectedTransition.internal;\n var reentryNodes = [];\n if (!isInternal) {\n nextStateNodes.forEach(function (targetNode) {\n reentryNodes.push.apply(reentryNodes, __spreadArray([], __read(_this.getExternalReentryNodes(targetNode)), false));\n });\n }\n return {\n transitions: [selectedTransition],\n entrySet: reentryNodes,\n exitSet: isInternal ? [] : [this],\n configuration: allNextStateNodes,\n source: state,\n actions: actions\n };\n };\n StateNode.prototype.getExternalReentryNodes = function (targetNode) {\n var nodes = [];\n var _a = __read(targetNode.order > this.order ? [targetNode, this] : [this, targetNode], 2),\n marker = _a[0],\n possibleAncestor = _a[1];\n while (marker && marker !== possibleAncestor) {\n nodes.push(marker);\n marker = marker.parent;\n }\n if (marker !== possibleAncestor) {\n // we never got to `possibleAncestor`, therefore the initial `marker` \"escapes\" it\n // it's in a different part of the tree so no states will be reentered for such an external transition\n return [];\n }\n nodes.push(possibleAncestor);\n return nodes;\n };\n StateNode.prototype.getActions = function (resolvedConfig, isDone, transition, currentContext, _event, prevState) {\n var e_4, _a, e_5, _b;\n var prevConfig = getConfiguration([], prevState ? this.getStateNodes(prevState.value) : [this]);\n try {\n for (var resolvedConfig_1 = __values(resolvedConfig), resolvedConfig_1_1 = resolvedConfig_1.next(); !resolvedConfig_1_1.done; resolvedConfig_1_1 = resolvedConfig_1.next()) {\n var sn = resolvedConfig_1_1.value;\n if (!has(prevConfig, sn) || has(transition.entrySet, sn.parent)) {\n transition.entrySet.push(sn);\n }\n }\n } catch (e_4_1) {\n e_4 = {\n error: e_4_1\n };\n } finally {\n try {\n if (resolvedConfig_1_1 && !resolvedConfig_1_1.done && (_a = resolvedConfig_1.return)) _a.call(resolvedConfig_1);\n } finally {\n if (e_4) throw e_4.error;\n }\n }\n try {\n for (var prevConfig_1 = __values(prevConfig), prevConfig_1_1 = prevConfig_1.next(); !prevConfig_1_1.done; prevConfig_1_1 = prevConfig_1.next()) {\n var sn = prevConfig_1_1.value;\n if (!has(resolvedConfig, sn) || has(transition.exitSet, sn.parent)) {\n transition.exitSet.push(sn);\n }\n }\n } catch (e_5_1) {\n e_5 = {\n error: e_5_1\n };\n } finally {\n try {\n if (prevConfig_1_1 && !prevConfig_1_1.done && (_b = prevConfig_1.return)) _b.call(prevConfig_1);\n } finally {\n if (e_5) throw e_5.error;\n }\n }\n var doneEvents = flatten(transition.entrySet.map(function (sn) {\n var events = [];\n if (sn.type !== 'final') {\n return events;\n }\n var parent = sn.parent;\n if (!parent.parent) {\n return events;\n }\n events.push(done(sn.id, sn.doneData),\n // TODO: deprecate - final states should not emit done events for their own state.\n done(parent.id, sn.doneData ? mapContext(sn.doneData, currentContext, _event) : undefined));\n var grandparent = parent.parent;\n if (grandparent.type === 'parallel') {\n if (getChildren(grandparent).every(function (parentNode) {\n return isInFinalState(transition.configuration, parentNode);\n })) {\n events.push(done(grandparent.id));\n }\n }\n return events;\n }));\n transition.exitSet.sort(function (a, b) {\n return b.order - a.order;\n });\n transition.entrySet.sort(function (a, b) {\n return a.order - b.order;\n });\n var entryStates = new Set(transition.entrySet);\n var exitStates = new Set(transition.exitSet);\n var _c = __read([flatten(Array.from(entryStates).map(function (stateNode) {\n return __spreadArray(__spreadArray([], __read(stateNode.activities.map(function (activity) {\n return start(activity);\n })), false), __read(stateNode.onEntry), false);\n })).concat(doneEvents.map(raise)), flatten(Array.from(exitStates).map(function (stateNode) {\n return __spreadArray(__spreadArray([], __read(stateNode.onExit), false), __read(stateNode.activities.map(function (activity) {\n return stop(activity);\n })), false);\n }))], 2),\n entryActions = _c[0],\n exitActions = _c[1];\n var actions = toActionObjects(exitActions.concat(transition.actions).concat(entryActions), this.machine.options.actions);\n if (isDone) {\n var stopActions = toActionObjects(flatten(__spreadArray([], __read(resolvedConfig), false).sort(function (a, b) {\n return b.order - a.order;\n }).map(function (stateNode) {\n return stateNode.onExit;\n })), this.machine.options.actions).filter(function (action) {\n return action.type !== raise$1 && (action.type !== send$1 || !!action.to && action.to !== SpecialTargets.Internal);\n });\n return actions.concat(stopActions);\n }\n return actions;\n };\n /**\r\n * Determines the next state given the current `state` and sent `event`.\r\n *\r\n * @param state The current State instance or state value\r\n * @param event The event that was sent at the current state\r\n * @param context The current context (extended state) of the current state\r\n */\n\n StateNode.prototype.transition = function (state, event, context, exec) {\n if (state === void 0) {\n state = this.initialState;\n }\n var _event = toSCXMLEvent(event);\n var currentState;\n if (state instanceof State) {\n currentState = context === undefined ? state : this.resolveState(State.from(state, context));\n } else {\n var resolvedStateValue = isString(state) ? this.resolve(pathToStateValue(this.getResolvedPath(state))) : this.resolve(state);\n var resolvedContext = context !== null && context !== void 0 ? context : this.machine.context;\n currentState = this.resolveState(State.from(resolvedStateValue, resolvedContext));\n }\n if (!IS_PRODUCTION && _event.name === WILDCARD) {\n throw new Error(\"An event cannot have the wildcard type ('\".concat(WILDCARD, \"')\"));\n }\n if (this.strict) {\n if (!this.events.includes(_event.name) && !isBuiltInEvent(_event.name)) {\n throw new Error(\"Machine '\".concat(this.id, \"' does not accept event '\").concat(_event.name, \"'\"));\n }\n }\n var stateTransition = this._transition(currentState.value, currentState, _event) || {\n transitions: [],\n configuration: [],\n entrySet: [],\n exitSet: [],\n source: currentState,\n actions: []\n };\n var prevConfig = getConfiguration([], this.getStateNodes(currentState.value));\n var resolvedConfig = stateTransition.configuration.length ? getConfiguration(prevConfig, stateTransition.configuration) : prevConfig;\n stateTransition.configuration = __spreadArray([], __read(resolvedConfig), false);\n return this.resolveTransition(stateTransition, currentState, currentState.context, exec, _event);\n };\n StateNode.prototype.resolveRaisedTransition = function (state, _event, originalEvent, predictableExec) {\n var _a;\n var currentActions = state.actions;\n state = this.transition(state, _event, undefined, predictableExec); // Save original event to state\n // TODO: this should be the raised event! Delete in V5 (breaking)\n\n state._event = originalEvent;\n state.event = originalEvent.data;\n (_a = state.actions).unshift.apply(_a, __spreadArray([], __read(currentActions), false));\n return state;\n };\n StateNode.prototype.resolveTransition = function (stateTransition, currentState, context, predictableExec, _event) {\n var e_6, _a;\n var _this = this;\n if (_event === void 0) {\n _event = initEvent;\n }\n var configuration = stateTransition.configuration; // Transition will \"apply\" if:\n // - this is the initial state (there is no current state)\n // - OR there are transitions\n\n var willTransition = !currentState || stateTransition.transitions.length > 0;\n var resolvedConfiguration = willTransition ? stateTransition.configuration : currentState ? currentState.configuration : [];\n var isDone = isInFinalState(resolvedConfiguration, this);\n var resolvedStateValue = willTransition ? getValue(this.machine, configuration) : undefined;\n var historyValue = currentState ? currentState.historyValue ? currentState.historyValue : stateTransition.source ? this.machine.historyValue(currentState.value) : undefined : undefined;\n var actions = this.getActions(new Set(resolvedConfiguration), isDone, stateTransition, context, _event, currentState);\n var activities = currentState ? _assign({}, currentState.activities) : {};\n try {\n for (var actions_1 = __values(actions), actions_1_1 = actions_1.next(); !actions_1_1.done; actions_1_1 = actions_1.next()) {\n var action = actions_1_1.value;\n if (action.type === start$1) {\n activities[action.activity.id || action.activity.type] = action;\n } else if (action.type === stop$1) {\n activities[action.activity.id || action.activity.type] = false;\n }\n }\n } catch (e_6_1) {\n e_6 = {\n error: e_6_1\n };\n } finally {\n try {\n if (actions_1_1 && !actions_1_1.done && (_a = actions_1.return)) _a.call(actions_1);\n } finally {\n if (e_6) throw e_6.error;\n }\n }\n var _b = __read(resolveActions(this, currentState, context, _event, actions, predictableExec, this.machine.config.predictableActionArguments || this.machine.config.preserveActionOrder), 2),\n resolvedActions = _b[0],\n updatedContext = _b[1];\n var _c = __read(partition(resolvedActions, function (action) {\n return action.type === raise$1 || action.type === send$1 && action.to === SpecialTargets.Internal;\n }), 2),\n raisedEvents = _c[0],\n nonRaisedActions = _c[1];\n var invokeActions = resolvedActions.filter(function (action) {\n var _a;\n return action.type === start$1 && ((_a = action.activity) === null || _a === void 0 ? void 0 : _a.type) === invoke;\n });\n var children = invokeActions.reduce(function (acc, action) {\n acc[action.activity.id] = createInvocableActor(action.activity, _this.machine, updatedContext, _event);\n return acc;\n }, currentState ? _assign({}, currentState.children) : {});\n var nextState = new State({\n value: resolvedStateValue || currentState.value,\n context: updatedContext,\n _event: _event,\n // Persist _sessionid between states\n _sessionid: currentState ? currentState._sessionid : null,\n historyValue: resolvedStateValue ? historyValue ? updateHistoryValue(historyValue, resolvedStateValue) : undefined : currentState ? currentState.historyValue : undefined,\n history: !resolvedStateValue || stateTransition.source ? currentState : undefined,\n actions: resolvedStateValue ? nonRaisedActions : [],\n activities: resolvedStateValue ? activities : currentState ? currentState.activities : {},\n events: [],\n configuration: resolvedConfiguration,\n transitions: stateTransition.transitions,\n children: children,\n done: isDone,\n tags: getTagsFromConfiguration(resolvedConfiguration),\n machine: this\n });\n var didUpdateContext = context !== updatedContext;\n nextState.changed = _event.name === update || didUpdateContext; // Dispose of penultimate histories to prevent memory leaks\n\n var history = nextState.history;\n if (history) {\n delete history.history;\n } // There are transient transitions if the machine is not in a final state\n // and if some of the state nodes have transient (\"always\") transitions.\n\n var hasAlwaysTransitions = !isDone && (this._transient || configuration.some(function (stateNode) {\n return stateNode._transient;\n })); // If there are no enabled transitions, check if there are transient transitions.\n // If there are transient transitions, continue checking for more transitions\n // because an transient transition should be triggered even if there are no\n // enabled transitions.\n //\n // If we're already working on an transient transition then stop to prevent an infinite loop.\n //\n // Otherwise, if there are no enabled nor transient transitions, we are done.\n\n if (!willTransition && (!hasAlwaysTransitions || _event.name === NULL_EVENT)) {\n return nextState;\n }\n var maybeNextState = nextState;\n if (!isDone) {\n if (hasAlwaysTransitions) {\n maybeNextState = this.resolveRaisedTransition(maybeNextState, {\n type: nullEvent\n }, _event, predictableExec);\n }\n while (raisedEvents.length) {\n var raisedEvent = raisedEvents.shift();\n maybeNextState = this.resolveRaisedTransition(maybeNextState, raisedEvent._event, _event, predictableExec);\n }\n } // Detect if state changed\n\n var changed = maybeNextState.changed || (history ? !!maybeNextState.actions.length || didUpdateContext || typeof history.value !== typeof maybeNextState.value || !stateValuesEqual(maybeNextState.value, history.value) : undefined);\n maybeNextState.changed = changed; // Preserve original history after raised events\n\n maybeNextState.history = history;\n return maybeNextState;\n };\n /**\r\n * Returns the child state node from its relative `stateKey`, or throws.\r\n */\n\n StateNode.prototype.getStateNode = function (stateKey) {\n if (isStateId(stateKey)) {\n return this.machine.getStateNodeById(stateKey);\n }\n if (!this.states) {\n throw new Error(\"Unable to retrieve child state '\".concat(stateKey, \"' from '\").concat(this.id, \"'; no child states exist.\"));\n }\n var result = this.states[stateKey];\n if (!result) {\n throw new Error(\"Child state '\".concat(stateKey, \"' does not exist on '\").concat(this.id, \"'\"));\n }\n return result;\n };\n /**\r\n * Returns the state node with the given `stateId`, or throws.\r\n *\r\n * @param stateId The state ID. The prefix \"#\" is removed.\r\n */\n\n StateNode.prototype.getStateNodeById = function (stateId) {\n var resolvedStateId = isStateId(stateId) ? stateId.slice(STATE_IDENTIFIER.length) : stateId;\n if (resolvedStateId === this.id) {\n return this;\n }\n var stateNode = this.machine.idMap[resolvedStateId];\n if (!stateNode) {\n throw new Error(\"Child state node '#\".concat(resolvedStateId, \"' does not exist on machine '\").concat(this.id, \"'\"));\n }\n return stateNode;\n };\n /**\r\n * Returns the relative state node from the given `statePath`, or throws.\r\n *\r\n * @param statePath The string or string array relative path to the state node.\r\n */\n\n StateNode.prototype.getStateNodeByPath = function (statePath) {\n if (typeof statePath === 'string' && isStateId(statePath)) {\n try {\n return this.getStateNodeById(statePath.slice(1));\n } catch (e) {// try individual paths\n // throw e;\n }\n }\n var arrayStatePath = toStatePath(statePath, this.delimiter).slice();\n var currentStateNode = this;\n while (arrayStatePath.length) {\n var key = arrayStatePath.shift();\n if (!key.length) {\n break;\n }\n currentStateNode = currentStateNode.getStateNode(key);\n }\n return currentStateNode;\n };\n /**\r\n * Resolves a partial state value with its full representation in this machine.\r\n *\r\n * @param stateValue The partial state value to resolve.\r\n */\n\n StateNode.prototype.resolve = function (stateValue) {\n var _a;\n var _this = this;\n if (!stateValue) {\n return this.initialStateValue || EMPTY_OBJECT; // TODO: type-specific properties\n }\n\n switch (this.type) {\n case 'parallel':\n return mapValues(this.initialStateValue, function (subStateValue, subStateKey) {\n return subStateValue ? _this.getStateNode(subStateKey).resolve(stateValue[subStateKey] || subStateValue) : EMPTY_OBJECT;\n });\n case 'compound':\n if (isString(stateValue)) {\n var subStateNode = this.getStateNode(stateValue);\n if (subStateNode.type === 'parallel' || subStateNode.type === 'compound') {\n return _a = {}, _a[stateValue] = subStateNode.initialStateValue, _a;\n }\n return stateValue;\n }\n if (!Object.keys(stateValue).length) {\n return this.initialStateValue || {};\n }\n return mapValues(stateValue, function (subStateValue, subStateKey) {\n return subStateValue ? _this.getStateNode(subStateKey).resolve(subStateValue) : EMPTY_OBJECT;\n });\n default:\n return stateValue || EMPTY_OBJECT;\n }\n };\n StateNode.prototype.getResolvedPath = function (stateIdentifier) {\n if (isStateId(stateIdentifier)) {\n var stateNode = this.machine.idMap[stateIdentifier.slice(STATE_IDENTIFIER.length)];\n if (!stateNode) {\n throw new Error(\"Unable to find state node '\".concat(stateIdentifier, \"'\"));\n }\n return stateNode.path;\n }\n return toStatePath(stateIdentifier, this.delimiter);\n };\n Object.defineProperty(StateNode.prototype, \"initialStateValue\", {\n get: function get() {\n var _a;\n if (this.__cache.initialStateValue) {\n return this.__cache.initialStateValue;\n }\n var initialStateValue;\n if (this.type === 'parallel') {\n initialStateValue = mapFilterValues(this.states, function (state) {\n return state.initialStateValue || EMPTY_OBJECT;\n }, function (stateNode) {\n return !(stateNode.type === 'history');\n });\n } else if (this.initial !== undefined) {\n if (!this.states[this.initial]) {\n throw new Error(\"Initial state '\".concat(this.initial, \"' not found on '\").concat(this.key, \"'\"));\n }\n initialStateValue = isLeafNode(this.states[this.initial]) ? this.initial : (_a = {}, _a[this.initial] = this.states[this.initial].initialStateValue, _a);\n } else {\n // The finite state value of a machine without child states is just an empty object\n initialStateValue = {};\n }\n this.__cache.initialStateValue = initialStateValue;\n return this.__cache.initialStateValue;\n },\n enumerable: false,\n configurable: true\n });\n StateNode.prototype.getInitialState = function (stateValue, context) {\n this._init(); // TODO: this should be in the constructor (see note in constructor)\n\n var configuration = this.getStateNodes(stateValue);\n return this.resolveTransition({\n configuration: configuration,\n entrySet: __spreadArray([], __read(configuration), false),\n exitSet: [],\n transitions: [],\n source: undefined,\n actions: []\n }, undefined, context !== null && context !== void 0 ? context : this.machine.context, undefined);\n };\n Object.defineProperty(StateNode.prototype, \"initialState\", {\n /**\r\n * The initial State instance, which includes all actions to be executed from\r\n * entering the initial state.\r\n */\n get: function get() {\n var initialStateValue = this.initialStateValue;\n if (!initialStateValue) {\n throw new Error(\"Cannot retrieve initial state from simple state '\".concat(this.id, \"'.\"));\n }\n return this.getInitialState(initialStateValue);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"target\", {\n /**\r\n * The target state value of the history state node, if it exists. This represents the\r\n * default state value to transition to if no history value exists yet.\r\n */\n get: function get() {\n var target;\n if (this.type === 'history') {\n var historyConfig = this.config;\n if (isString(historyConfig.target)) {\n target = isStateId(historyConfig.target) ? pathToStateValue(this.machine.getStateNodeById(historyConfig.target).path.slice(this.path.length - 1)) : historyConfig.target;\n } else {\n target = historyConfig.target;\n }\n }\n return target;\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Returns the leaf nodes from a state path relative to this state node.\r\n *\r\n * @param relativeStateId The relative state path to retrieve the state nodes\r\n * @param history The previous state to retrieve history\r\n * @param resolve Whether state nodes should resolve to initial child state nodes\r\n */\n\n StateNode.prototype.getRelativeStateNodes = function (relativeStateId, historyValue, resolve) {\n if (resolve === void 0) {\n resolve = true;\n }\n return resolve ? relativeStateId.type === 'history' ? relativeStateId.resolveHistory(historyValue) : relativeStateId.initialStateNodes : [relativeStateId];\n };\n Object.defineProperty(StateNode.prototype, \"initialStateNodes\", {\n get: function get() {\n var _this = this;\n if (isLeafNode(this)) {\n return [this];\n } // Case when state node is compound but no initial state is defined\n\n if (this.type === 'compound' && !this.initial) {\n if (!IS_PRODUCTION) {\n warn(false, \"Compound state node '\".concat(this.id, \"' has no initial state.\"));\n }\n return [this];\n }\n var initialStateNodePaths = toStatePaths(this.initialStateValue);\n return flatten(initialStateNodePaths.map(function (initialPath) {\n return _this.getFromRelativePath(initialPath);\n }));\n },\n enumerable: false,\n configurable: true\n });\n /**\r\n * Retrieves state nodes from a relative path to this state node.\r\n *\r\n * @param relativePath The relative path from this state node\r\n * @param historyValue\r\n */\n\n StateNode.prototype.getFromRelativePath = function (relativePath) {\n if (!relativePath.length) {\n return [this];\n }\n var _a = __read(relativePath),\n stateKey = _a[0],\n childStatePath = _a.slice(1);\n if (!this.states) {\n throw new Error(\"Cannot retrieve subPath '\".concat(stateKey, \"' from node with no states\"));\n }\n var childStateNode = this.getStateNode(stateKey);\n if (childStateNode.type === 'history') {\n return childStateNode.resolveHistory();\n }\n if (!this.states[stateKey]) {\n throw new Error(\"Child state '\".concat(stateKey, \"' does not exist on '\").concat(this.id, \"'\"));\n }\n return this.states[stateKey].getFromRelativePath(childStatePath);\n };\n StateNode.prototype.historyValue = function (relativeStateValue) {\n if (!Object.keys(this.states).length) {\n return undefined;\n }\n return {\n current: relativeStateValue || this.initialStateValue,\n states: mapFilterValues(this.states, function (stateNode, key) {\n if (!relativeStateValue) {\n return stateNode.historyValue();\n }\n var subStateValue = isString(relativeStateValue) ? undefined : relativeStateValue[key];\n return stateNode.historyValue(subStateValue || stateNode.initialStateValue);\n }, function (stateNode) {\n return !stateNode.history;\n })\n };\n };\n /**\r\n * Resolves to the historical value(s) of the parent state node,\r\n * represented by state nodes.\r\n *\r\n * @param historyValue\r\n */\n\n StateNode.prototype.resolveHistory = function (historyValue) {\n var _this = this;\n if (this.type !== 'history') {\n return [this];\n }\n var parent = this.parent;\n if (!historyValue) {\n var historyTarget = this.target;\n return historyTarget ? flatten(toStatePaths(historyTarget).map(function (relativeChildPath) {\n return parent.getFromRelativePath(relativeChildPath);\n })) : parent.initialStateNodes;\n }\n var subHistoryValue = nestedPath(parent.path, 'states')(historyValue).current;\n if (isString(subHistoryValue)) {\n return [parent.getStateNode(subHistoryValue)];\n }\n return flatten(toStatePaths(subHistoryValue).map(function (subStatePath) {\n return _this.history === 'deep' ? parent.getFromRelativePath(subStatePath) : [parent.states[subStatePath[0]]];\n }));\n };\n Object.defineProperty(StateNode.prototype, \"stateIds\", {\n /**\r\n * All the state node IDs of this state node and its descendant state nodes.\r\n */\n get: function get() {\n var _this = this;\n var childStateIds = flatten(Object.keys(this.states).map(function (stateKey) {\n return _this.states[stateKey].stateIds;\n }));\n return [this.id].concat(childStateIds);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"events\", {\n /**\r\n * All the event types accepted by this state node and its descendants.\r\n */\n get: function get() {\n var e_7, _a, e_8, _b;\n if (this.__cache.events) {\n return this.__cache.events;\n }\n var states = this.states;\n var events = new Set(this.ownEvents);\n if (states) {\n try {\n for (var _c = __values(Object.keys(states)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var stateId = _d.value;\n var state = states[stateId];\n if (state.states) {\n try {\n for (var _e = (e_8 = void 0, __values(state.events)), _f = _e.next(); !_f.done; _f = _e.next()) {\n var event_1 = _f.value;\n events.add(\"\".concat(event_1));\n }\n } catch (e_8_1) {\n e_8 = {\n error: e_8_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n } finally {\n if (e_8) throw e_8.error;\n }\n }\n }\n }\n } catch (e_7_1) {\n e_7 = {\n error: e_7_1\n };\n } finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n } finally {\n if (e_7) throw e_7.error;\n }\n }\n }\n return this.__cache.events = Array.from(events);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(StateNode.prototype, \"ownEvents\", {\n /**\r\n * All the events that have transitions directly from this state node.\r\n *\r\n * Excludes any inert events.\r\n */\n get: function get() {\n var events = new Set(this.transitions.filter(function (transition) {\n return !(!transition.target && !transition.actions.length && transition.internal);\n }).map(function (transition) {\n return transition.eventType;\n }));\n return Array.from(events);\n },\n enumerable: false,\n configurable: true\n });\n StateNode.prototype.resolveTarget = function (_target) {\n var _this = this;\n if (_target === undefined) {\n // an undefined target signals that the state node should not transition from that state when receiving that event\n return undefined;\n }\n return _target.map(function (target) {\n if (!isString(target)) {\n return target;\n }\n var isInternalTarget = target[0] === _this.delimiter; // If internal target is defined on machine,\n // do not include machine key on target\n\n if (isInternalTarget && !_this.parent) {\n return _this.getStateNodeByPath(target.slice(1));\n }\n var resolvedTarget = isInternalTarget ? _this.key + target : target;\n if (_this.parent) {\n try {\n var targetStateNode = _this.parent.getStateNodeByPath(resolvedTarget);\n return targetStateNode;\n } catch (err) {\n throw new Error(\"Invalid transition definition for state node '\".concat(_this.id, \"':\\n\").concat(err.message));\n }\n } else {\n return _this.getStateNodeByPath(resolvedTarget);\n }\n });\n };\n StateNode.prototype.formatTransition = function (transitionConfig) {\n var _this = this;\n var normalizedTarget = normalizeTarget(transitionConfig.target);\n var internal = 'internal' in transitionConfig ? transitionConfig.internal : normalizedTarget ? normalizedTarget.some(function (_target) {\n return isString(_target) && _target[0] === _this.delimiter;\n }) : true;\n var guards = this.machine.options.guards;\n var target = this.resolveTarget(normalizedTarget);\n var transition = _assign(_assign({}, transitionConfig), {\n actions: toActionObjects(toArray(transitionConfig.actions)),\n cond: toGuard(transitionConfig.cond, guards),\n target: target,\n source: this,\n internal: internal,\n eventType: transitionConfig.event,\n toJSON: function toJSON() {\n return _assign(_assign({}, transition), {\n target: transition.target ? transition.target.map(function (t) {\n return \"#\".concat(t.id);\n }) : undefined,\n source: \"#\".concat(_this.id)\n });\n }\n });\n return transition;\n };\n StateNode.prototype.formatTransitions = function () {\n var e_9, _a;\n var _this = this;\n var onConfig;\n if (!this.config.on) {\n onConfig = [];\n } else if (Array.isArray(this.config.on)) {\n onConfig = this.config.on;\n } else {\n var _b = this.config.on,\n _c = WILDCARD,\n _d = _b[_c],\n wildcardConfigs = _d === void 0 ? [] : _d,\n strictTransitionConfigs_1 = __rest(_b, [typeof _c === \"symbol\" ? _c : _c + \"\"]);\n onConfig = flatten(Object.keys(strictTransitionConfigs_1).map(function (key) {\n if (!IS_PRODUCTION && key === NULL_EVENT) {\n warn(false, \"Empty string transition configs (e.g., `{ on: { '': ... }}`) for transient transitions are deprecated. Specify the transition in the `{ always: ... }` property instead. \" + \"Please check the `on` configuration for \\\"#\".concat(_this.id, \"\\\".\"));\n }\n var transitionConfigArray = toTransitionConfigArray(key, strictTransitionConfigs_1[key]);\n if (!IS_PRODUCTION) {\n validateArrayifiedTransitions(_this, key, transitionConfigArray);\n }\n return transitionConfigArray;\n }).concat(toTransitionConfigArray(WILDCARD, wildcardConfigs)));\n }\n var eventlessConfig = this.config.always ? toTransitionConfigArray('', this.config.always) : [];\n var doneConfig = this.config.onDone ? toTransitionConfigArray(String(done(this.id)), this.config.onDone) : [];\n if (!IS_PRODUCTION) {\n warn(!(this.config.onDone && !this.parent), \"Root nodes cannot have an \\\".onDone\\\" transition. Please check the config of \\\"\".concat(this.id, \"\\\".\"));\n }\n var invokeConfig = flatten(this.invoke.map(function (invokeDef) {\n var settleTransitions = [];\n if (invokeDef.onDone) {\n settleTransitions.push.apply(settleTransitions, __spreadArray([], __read(toTransitionConfigArray(String(doneInvoke(invokeDef.id)), invokeDef.onDone)), false));\n }\n if (invokeDef.onError) {\n settleTransitions.push.apply(settleTransitions, __spreadArray([], __read(toTransitionConfigArray(String(error(invokeDef.id)), invokeDef.onError)), false));\n }\n return settleTransitions;\n }));\n var delayedTransitions = this.after;\n var formattedTransitions = flatten(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(doneConfig), false), __read(invokeConfig), false), __read(onConfig), false), __read(eventlessConfig), false).map(function (transitionConfig) {\n return toArray(transitionConfig).map(function (transition) {\n return _this.formatTransition(transition);\n });\n }));\n try {\n for (var delayedTransitions_1 = __values(delayedTransitions), delayedTransitions_1_1 = delayedTransitions_1.next(); !delayedTransitions_1_1.done; delayedTransitions_1_1 = delayedTransitions_1.next()) {\n var delayedTransition = delayedTransitions_1_1.value;\n formattedTransitions.push(delayedTransition);\n }\n } catch (e_9_1) {\n e_9 = {\n error: e_9_1\n };\n } finally {\n try {\n if (delayedTransitions_1_1 && !delayedTransitions_1_1.done && (_a = delayedTransitions_1.return)) _a.call(delayedTransitions_1);\n } finally {\n if (e_9) throw e_9.error;\n }\n }\n return formattedTransitions;\n };\n return StateNode;\n}();\n\nvar warned = false;\nfunction createMachine(config, options) {\n if (!IS_PRODUCTION && !config.predictableActionArguments && !warned) {\n warned = true;\n console.warn('It is highly recommended to set `predictableActionArguments` to `true` when using `createMachine`. https://xstate.js.org/docs/guides/actions.html');\n }\n return new StateNode(config, options);\n}\n\nvar assign = assign$1;\n\nfunction ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar WEB_TIEBREAKER_VALUE = 0xfffffffe;\nvar MAX_RETRIES = 2;\nvar DEFAULT_IS_OK_IN_TRANSACTION = true;\nvar HEADER_NO_OK_IN_TRANSACTION = 'noOkInTransaction';\nclass Roap extends EventEmitter$5 {\n constructor(createLocalOfferCallback, handleRemoteOfferCallback, handleRemoteAnswerCallback, debugId, initialSeq) {\n super();\n _defineProperty(this, \"id\", void 0);\n _defineProperty(this, \"createLocalOfferCallback\", void 0);\n _defineProperty(this, \"handleRemoteOfferCallback\", void 0);\n _defineProperty(this, \"handleRemoteAnswerCallback\", void 0);\n _defineProperty(this, \"stateMachine\", void 0);\n _defineProperty(this, \"initiateOfferPromises\", void 0);\n this.id = debugId || 'ROAP';\n this.createLocalOfferCallback = createLocalOfferCallback;\n this.handleRemoteOfferCallback = handleRemoteOfferCallback;\n this.handleRemoteAnswerCallback = handleRemoteAnswerCallback;\n this.initiateOfferPromises = [];\n var fsm = createMachine({\n tsTypes: {},\n schema: {\n context: {},\n events: {},\n services: {}\n },\n preserveActionOrder: true,\n id: 'roap',\n initial: 'idle',\n context: {\n seq: initialSeq || 0,\n pendingLocalOffer: false,\n isHandlingOfferRequest: false,\n retryCounter: 0,\n isOkInTransaction: DEFAULT_IS_OK_IN_TRANSACTION\n },\n states: {\n browserError: {\n onEntry: (context, event) => {\n this.error('FSM', \"browserError state onEntry: context=\".concat(JSON.stringify(context), \":\"), event.data);\n this.emit(MediaConnectionEventNames.ROAP_FAILURE, event.data);\n }\n },\n remoteError: {\n onEntry: (_, event) => {\n this.log('FSM', 'remoteError state onEntry called, emitting MediaConnectionEventNames.ROAP_FAILURE');\n this.emit(MediaConnectionEventNames.ROAP_FAILURE, event.data);\n }\n },\n idle: {\n always: {\n cond: 'isPendingLocalOffer',\n actions: ['increaseSeq', 'sendStartedEvent'],\n target: 'creatingLocalOffer'\n },\n on: {\n INITIATE_OFFER: {\n actions: ['increaseSeq', 'sendStartedEvent'],\n target: 'creatingLocalOffer'\n },\n REMOTE_OFFER_ARRIVED: [{\n cond: 'isSameSeq',\n actions: 'sendOutOfOrderError'\n }, {\n actions: ['updateSeq', 'sendStartedEvent'],\n target: 'settingRemoteOffer'\n }],\n REMOTE_OFFER_REQUEST_ARRIVED: [{\n cond: 'isSameSeq',\n actions: 'sendOutOfOrderError'\n }, {\n actions: ['updateSeq', 'setOfferRequestFlag', 'sendStartedEvent'],\n target: 'creatingLocalOffer'\n }],\n REMOTE_ANSWER_ARRIVED: [{\n cond: 'isSameSeq',\n actions: 'sendRoapOKMessage'\n }, {\n actions: 'sendInvalidStateError'\n }],\n REMOTE_OK_ARRIVED: {\n actions: 'sendInvalidStateError'\n }\n }\n },\n creatingLocalOffer: {\n invoke: {\n src: 'createLocalOffer',\n onDone: [{\n cond: 'isPendingLocalOffer',\n target: 'creatingLocalOffer'\n }, {\n cond: 'isHandlingOfferRequest',\n actions: ['sendRoapOfferResponseMessage', 'resolvePendingInitiateOfferPromises'],\n target: 'waitingForAnswer'\n }, {\n actions: ['sendRoapOfferMessage', 'resolvePendingInitiateOfferPromises'],\n target: 'waitingForAnswer'\n }],\n onError: {\n actions: 'rejectPendingInitiateOfferPromises',\n target: 'browserError'\n }\n },\n onEntry: ['resetPendingLocalOffer'],\n on: {\n INITIATE_OFFER: {\n actions: 'enqueueNewOfferCreation'\n },\n REMOTE_OFFER_ARRIVED: [{\n actions: 'handleGlare'\n }],\n REMOTE_OFFER_REQUEST_ARRIVED: [{\n cond: 'isHandlingOfferRequest',\n actions: 'ignoreDuplicate'\n }, {\n actions: 'handleGlare'\n }],\n REMOTE_ANSWER_ARRIVED: {\n actions: 'sendInvalidStateError'\n },\n REMOTE_OK_ARRIVED: {\n actions: 'sendInvalidStateError'\n }\n }\n },\n waitingForAnswer: {\n on: {\n REMOTE_ANSWER_ARRIVED: [{\n actions: ['resetRetryCounter', 'updateSeq', 'updateIsOkInTransaction'],\n target: 'settingRemoteAnswer'\n }],\n INITIATE_OFFER: {\n actions: 'enqueueNewOfferCreation'\n },\n REMOTE_OFFER_ARRIVED: {\n actions: 'handleGlare'\n },\n REMOTE_OFFER_REQUEST_ARRIVED: [{\n cond: 'isHandlingOfferRequest',\n actions: 'ignoreDuplicate'\n }, {\n actions: 'handleGlare'\n }],\n REMOTE_OK_ARRIVED: {\n actions: 'sendInvalidStateError'\n },\n ERROR_ARRIVED: [{\n cond: 'shouldErrorTriggerOfferRetry',\n actions: ['increaseSeq', 'increaseRetryCounter'],\n target: 'creatingLocalOffer'\n }, {\n cond: 'isSameSeq',\n target: 'remoteError'\n }]\n }\n },\n settingRemoteAnswer: {\n invoke: {\n src: 'handleRemoteAnswer',\n onDone: [{\n cond: 'isOkInTransaction',\n actions: ['sendRoapOKMessage', 'resetOfferRequestFlag', 'sendDoneEvent'],\n target: 'idle'\n }, {\n actions: ['resetOfferRequestFlag', 'sendDoneEvent'],\n target: 'idle'\n }],\n onError: {\n actions: 'sendGenericError',\n target: 'browserError'\n }\n },\n on: {\n INITIATE_OFFER: {\n actions: 'enqueueNewOfferCreation'\n },\n REMOTE_OFFER_ARRIVED: [{\n cond: 'isOkInTransaction',\n actions: 'sendInvalidStateError'\n }, {\n actions: 'sendRetryStateError'\n }],\n REMOTE_OFFER_REQUEST_ARRIVED: [{\n cond: 'isOkInTransaction',\n actions: 'sendInvalidStateError'\n }, {\n actions: 'sendRetryStateError'\n }],\n REMOTE_ANSWER_ARRIVED: [{\n cond: 'isSameSeq',\n actions: 'ignoreDuplicate'\n }, {\n actions: 'sendInvalidStateError'\n }],\n REMOTE_OK_ARRIVED: {\n actions: 'sendInvalidStateError'\n }\n }\n },\n settingRemoteOffer: {\n invoke: {\n src: 'handleRemoteOffer',\n onDone: {\n actions: ['resetOkInTransaction', 'sendRoapAnswerMessage'],\n target: 'waitingForOK'\n },\n onError: {\n actions: 'sendGenericError',\n target: 'browserError'\n }\n },\n on: {\n INITIATE_OFFER: {\n actions: 'enqueueNewOfferCreation'\n },\n REMOTE_OFFER_ARRIVED: [{\n cond: 'isSameSeq',\n actions: 'ignoreDuplicate'\n }, {\n actions: 'sendRetryAfterError'\n }],\n REMOTE_OFFER_REQUEST_ARRIVED: {\n actions: 'sendInvalidStateError'\n },\n REMOTE_ANSWER_ARRIVED: {\n actions: 'sendInvalidStateError'\n },\n REMOTE_OK_ARRIVED: {\n actions: 'sendInvalidStateError'\n }\n }\n },\n waitingForOK: {\n on: {\n REMOTE_OK_ARRIVED: [{\n actions: ['updateSeq', 'sendDoneEvent'],\n target: 'idle'\n }],\n INITIATE_OFFER: {\n actions: 'enqueueNewOfferCreation'\n },\n REMOTE_OFFER_ARRIVED: [{\n cond: 'isSameSeq',\n actions: 'ignoreDuplicate'\n }, {\n actions: 'sendInvalidStateError'\n }],\n REMOTE_OFFER_REQUEST_ARRIVED: {\n actions: 'sendInvalidStateError'\n },\n REMOTE_ANSWER_ARRIVED: {\n actions: 'sendInvalidStateError'\n },\n ERROR_ARRIVED: {\n cond: 'isSameSeq',\n target: 'remoteError'\n }\n }\n }\n }\n }, {\n services: {\n createLocalOffer: () => this.createLocalOfferCallback(),\n handleRemoteAnswer: (_context, event) => this.handleRemoteAnswerCallback(event.sdp),\n handleRemoteOffer: (_context, event) => this.handleRemoteOfferCallback(event.sdp)\n },\n actions: {\n enqueueNewOfferCreation: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n pendingLocalOffer: true\n })),\n resetPendingLocalOffer: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n pendingLocalOffer: false\n })),\n increaseSeq: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n seq: context.seq + 1\n })),\n updateSeq: assign((context, event) => _objectSpread$3(_objectSpread$3({}, context), {}, {\n seq: event.seq\n })),\n increaseRetryCounter: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n retryCounter: context.retryCounter + 1\n })),\n resetRetryCounter: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n retryCounter: 0\n })),\n setOfferRequestFlag: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n isHandlingOfferRequest: true\n })),\n resetOfferRequestFlag: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n isHandlingOfferRequest: false\n })),\n handleGlare: (_context, event) => {\n if (event.tieBreaker === WEB_TIEBREAKER_VALUE) {\n this.sendErrorMessage(event.seq, ErrorType.DOUBLECONFLICT);\n } else {\n this.sendErrorMessage(event.seq, ErrorType.CONFLICT);\n }\n },\n sendRoapOfferMessage: (context, event) => this.sendRoapOfferMessage(context.seq, event.data.sdp),\n sendRoapOfferResponseMessage: (context, event) => this.sendRoapOfferResponseMessage(context.seq, event.data.sdp),\n sendRoapOKMessage: context => this.sendRoapOkMessage(context.seq),\n sendRoapAnswerMessage: (context, event) => this.sendRoapAnswerMessage(context.seq, event.data.sdp),\n sendStartedEvent: () => this.sendStartedEvent(),\n sendDoneEvent: () => this.sendDoneEvent(),\n sendGenericError: context => this.sendErrorMessage(context.seq, ErrorType.FAILED),\n sendInvalidStateError: (_context, event) => this.sendErrorMessage(event.seq, ErrorType.INVALID_STATE),\n sendRetryStateError: (_context, event) => this.sendErrorMessage(event.seq, ErrorType.RETRY),\n sendOutOfOrderError: (_context, event) => this.sendErrorMessage(event.seq, ErrorType.OUT_OF_ORDER),\n sendRetryAfterError: (_context, event) => this.sendErrorMessage(event.seq, ErrorType.FAILED, {\n retryAfter: Math.floor(Math.random() * 11)\n }),\n ignoreDuplicate: (_context, event) => this.log('FSM', \"ignoring duplicate roap message \".concat(event.type, \" with seq=\").concat(event.seq)),\n resolvePendingInitiateOfferPromises: () => this.resolvePendingInitiateOfferPromises(),\n rejectPendingInitiateOfferPromises: (_context, event) => this.rejectPendingInitiateOfferPromises(event.data),\n updateIsOkInTransaction: assign((context, event) => {\n var _event$headers;\n return _objectSpread$3(_objectSpread$3({}, context), {}, {\n isOkInTransaction: !((_event$headers = event.headers) !== null && _event$headers !== void 0 && _event$headers.includes(HEADER_NO_OK_IN_TRANSACTION))\n });\n }),\n resetOkInTransaction: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {\n isOkInTransaction: DEFAULT_IS_OK_IN_TRANSACTION\n }))\n },\n guards: {\n isPendingLocalOffer: context => context.pendingLocalOffer,\n isHandlingOfferRequest: context => context.isHandlingOfferRequest,\n isSameSeq: (context, event) => {\n if (event.seq === context.seq) {\n this.log('FSM', \"incoming roap message seq is same as current context seq: \".concat(event.seq));\n return true;\n }\n return false;\n },\n shouldErrorTriggerOfferRetry: (context, event) => {\n var retryableErrorTypes = [ErrorType.DOUBLECONFLICT, ErrorType.INVALID_STATE, ErrorType.OUT_OF_ORDER, ErrorType.RETRY];\n if (retryableErrorTypes.includes(event.errorType)) {\n if (event.seq === context.seq && context.retryCounter < MAX_RETRIES) {\n this.log('FSM', \"retryable error message received with matching seq and retryCounter \".concat(context.retryCounter, \" < \").concat(MAX_RETRIES));\n return true;\n }\n if (event.seq !== context.seq) {\n this.log('FSM', \"ignoring error message with wrong seq: \".concat(event.seq, \" !== \").concat(context.seq));\n } else {\n this.log('FSM', \"reached max retries: retryCounter=\".concat(context.retryCounter));\n }\n }\n return false;\n },\n isOkInTransaction: context => context.isOkInTransaction\n }\n });\n this.stateMachine = interpret(fsm).onTransition((state, event) => this.log('onTransition', \"state=\".concat(state.value, \", event=\").concat(JSON.stringify(event)))).start();\n }\n log(action, description) {\n getLogger().info(\"\".concat(this.id, \":\").concat(action, \" \").concat(description));\n }\n error(action, description, error) {\n getLogger().error(\"\".concat(this.id, \":\").concat(action, \" \").concat(description, \" \").concat(getErrorDescription(error)));\n }\n sendRoapOfferMessage(seq, sdp) {\n this.log('sendRoapOfferMessage', 'emitting ROAP OFFER');\n this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {\n roapMessage: {\n seq,\n messageType: 'OFFER',\n sdp,\n tieBreaker: WEB_TIEBREAKER_VALUE\n }\n });\n }\n sendRoapOfferResponseMessage(seq, sdp) {\n this.log('sendRoapOfferResponseMessage', 'emitting ROAP OFFER RESPONSE');\n this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {\n roapMessage: {\n seq,\n messageType: 'OFFER_RESPONSE',\n sdp\n }\n });\n }\n sendRoapOkMessage(seq) {\n this.log('sendRoapOkMessage', 'emitting ROAP OK');\n this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {\n roapMessage: {\n seq,\n messageType: 'OK'\n }\n });\n }\n sendRoapAnswerMessage(seq, sdp) {\n this.log('sendRoapAnswerMessage', 'emitting ROAP ANSWER');\n this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {\n roapMessage: {\n seq,\n messageType: 'ANSWER',\n sdp\n }\n });\n }\n sendDoneEvent() {\n this.log('sendDoneEvent', 'emitting ROAP DONE');\n this.emit(MediaConnectionEventNames.ROAP_DONE);\n }\n sendStartedEvent() {\n this.log('sendStartedEvent', 'emitting ROAP STARTED');\n this.emit(MediaConnectionEventNames.ROAP_STARTED);\n }\n sendErrorMessage(seq, errorType) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var {\n retryAfter\n } = options;\n this.log('sendErrorMessage', \"emitting ROAP ERROR (\".concat(errorType, \")\"));\n this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {\n roapMessage: {\n seq,\n messageType: 'ERROR',\n errorType,\n retryAfter\n }\n });\n }\n getStateMachine() {\n return this.stateMachine;\n }\n initiateOffer() {\n return new Promise((resolve, reject) => {\n this.initiateOfferPromises.push({\n resolve,\n reject\n });\n this.stateMachine.send('INITIATE_OFFER');\n });\n }\n resolvePendingInitiateOfferPromises() {\n while (this.initiateOfferPromises.length > 0) {\n var promise = this.initiateOfferPromises.shift();\n promise === null || promise === void 0 ? void 0 : promise.resolve();\n }\n }\n rejectPendingInitiateOfferPromises(error) {\n while (this.initiateOfferPromises.length > 0) {\n var promise = this.initiateOfferPromises.shift();\n promise === null || promise === void 0 ? void 0 : promise.reject(error);\n }\n }\n validateIncomingRoapMessage(roapMessage) {\n var {\n errorType,\n messageType,\n seq\n } = roapMessage;\n var isValid = true;\n var errorToSend;\n if (seq < this.stateMachine.state.context.seq) {\n isValid = false;\n if (messageType !== 'ERROR') {\n errorToSend = ErrorType.OUT_OF_ORDER;\n this.error('validateIncomingRoapMessage', \"received roap message \".concat(messageType, \" with seq too low: \").concat(seq, \" < \").concat(this.stateMachine.state.context.seq));\n } else {\n this.error('validateIncomingRoapMessage', \"received ERROR message \".concat(errorType, \" with seq too low: \").concat(seq, \" < \").concat(this.stateMachine.state.context.seq, \", ignoring it\"));\n }\n }\n return {\n isValid,\n errorToSend\n };\n }\n roapMessageReceived(roapMessage) {\n var {\n errorCause,\n errorType,\n headers,\n messageType,\n sdp,\n seq,\n tieBreaker\n } = roapMessage;\n var {\n isValid,\n errorToSend\n } = this.validateIncomingRoapMessage(roapMessage);\n if (!isValid) {\n if (errorToSend) {\n this.sendErrorMessage(seq, errorToSend);\n }\n return;\n }\n switch (messageType) {\n case 'ANSWER':\n this.stateMachine.send('REMOTE_ANSWER_ARRIVED', {\n sdp,\n seq,\n headers\n });\n break;\n case 'OFFER':\n this.stateMachine.send('REMOTE_OFFER_ARRIVED', {\n sdp,\n seq,\n tieBreaker\n });\n break;\n case 'OFFER_REQUEST':\n this.stateMachine.send('REMOTE_OFFER_REQUEST_ARRIVED', {\n seq,\n tieBreaker\n });\n break;\n case 'OK':\n this.stateMachine.send('REMOTE_OK_ARRIVED', {\n sdp,\n seq\n });\n break;\n case 'ERROR':\n this.error('roapMessageReceived', \"Error received: seq=\".concat(seq, \" type=\").concat(errorType, \" cause=\").concat(errorCause));\n if (errorType === ErrorType.CONFLICT) {\n this.error('roapMessageReceived', \"CONFLICT error type received - this should never happen, because we use the tieBreaker value \".concat(WEB_TIEBREAKER_VALUE));\n }\n this.stateMachine.send('ERROR_ARRIVED', {\n seq,\n errorType\n });\n break;\n case 'OFFER_RESPONSE':\n this.error('roapMessageReceived', \"Received unexpected OFFER_RESPONSE: seq=\".concat(seq));\n break;\n default:\n this.error('roapMessageReceived()', \"unsupported messageType: \".concat(messageType));\n throw new Error('unhandled messageType');\n }\n }\n stop() {\n this.stateMachine.stop();\n }\n getSeq() {\n return this.stateMachine.state.context.seq;\n }\n}\n\nfunction ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass RoapMediaConnection extends EventEmitter$5 {\n constructor(mediaConnectionConfig, options, debugId) {\n var metricsCallback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : () => {};\n var closeCallback = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : () => {};\n var sendMetricsCallback = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : () => {};\n super();\n _defineProperty(this, \"id\", void 0);\n _defineProperty(this, \"debugId\", void 0);\n _defineProperty(this, \"mediaConnection\", void 0);\n _defineProperty(this, \"roap\", void 0);\n _defineProperty(this, \"sdpNegotiationStarted\", void 0);\n _defineProperty(this, \"closeCallback\", void 0);\n _defineProperty(this, \"sendMetricsCallback\", void 0);\n this.debugId = debugId;\n this.id = debugId || 'RoapMediaConnection';\n this.sdpNegotiationStarted = false;\n configureWcmeLogger(debugId);\n this.log('constructor()', \"config: \".concat(JSON.stringify(mediaConnectionConfig), \", options: \").concat(JSON.stringify(options)));\n this.mediaConnection = this.createMediaConnection({\n mediaConnectionConfig,\n options,\n metricsCallback,\n debugId\n });\n this.roap = this.createRoap(debugId);\n this.closeCallback = closeCallback;\n this.sendMetricsCallback = sendMetricsCallback;\n }\n log(action, description) {\n getLogger().info(\"\".concat(this.id, \":\").concat(action, \" \").concat(description));\n }\n error(action, description, error) {\n getLogger().error(\"\".concat(this.id, \":\").concat(action, \" \").concat(description, \" \").concat(getErrorDescription(error)));\n }\n forwardEvent(eventSource, eventType) {\n var _this = this;\n eventSource.on(eventType, function () {\n for (var _len = arguments.length, eventData = new Array(_len), _key = 0; _key < _len; _key++) {\n eventData[_key] = arguments[_key];\n }\n _this.emit(eventType, ...eventData);\n });\n }\n createMediaConnection(_ref) {\n var {\n mediaConnectionConfig,\n options,\n metricsCallback,\n debugId\n } = _ref;\n var mediaConnection = new MediaConnection(mediaConnectionConfig, options, metricsCallback, debugId);\n mediaConnection.on(MediaConnectionEventNames.REMOTE_TRACK_ADDED, this.onRemoteTrack.bind(this));\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.REMOTE_SDP_ANSWER_PROCESSED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.REMOTE_SDP_OFFER_PROCESSED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.LOCAL_SDP_ANSWER_GENERATED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.LOCAL_SDP_OFFER_GENERATED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.DTMF_TONE_CHANGED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.ICE_CANDIDATE);\n this.forwardEvent(mediaConnection, MediaConnectionEventNames.ICE_CANDIDATE_ERROR);\n return mediaConnection;\n }\n createRoap(debugId, seq) {\n var roap = new Roap(this.createLocalOffer.bind(this), this.handleRemoteOffer.bind(this), this.handleRemoteAnswer.bind(this), debugId, seq);\n roap.on(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event => this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event));\n roap.on(MediaConnectionEventNames.ROAP_STARTED, () => this.emit(MediaConnectionEventNames.ROAP_STARTED));\n roap.on(MediaConnectionEventNames.ROAP_DONE, () => this.emit(MediaConnectionEventNames.ROAP_DONE));\n roap.on(MediaConnectionEventNames.ROAP_FAILURE, error => this.emit(MediaConnectionEventNames.ROAP_FAILURE, error));\n return roap;\n }\n initiateOffer() {\n this.log('initiateOffer()', 'called');\n if (this.sdpNegotiationStarted) {\n this.error('initiateOffer()', 'SDP negotiation already started');\n return Promise.reject(new Error('SDP negotiation already started'));\n }\n this.mediaConnection.initializeTransceivers(false);\n this.sdpNegotiationStarted = true;\n return this.roap.initiateOffer();\n }\n close() {\n this.log('close()', 'called');\n this.closeMediaConnection();\n this.stopRoapSession();\n this.closeCallback();\n }\n forceRtcMetricsSend() {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var _this2$mediaConnectio;\n yield (_this2$mediaConnectio = _this2.mediaConnection) === null || _this2$mediaConnectio === void 0 ? void 0 : _this2$mediaConnectio.forceRtcMetricsCallback();\n _this2.sendMetricsCallback();\n })();\n }\n closeMediaConnection() {\n this.mediaConnection.close();\n this.mediaConnection.removeAllListeners();\n }\n stopRoapSession() {\n this.roap.stop();\n this.roap.removeAllListeners();\n }\n reconnect(iceServers) {\n var initiateOffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n this.log('reconnect()', \"iceServers: \".concat(JSON.stringify(iceServers)));\n var config = _objectSpread$2(_objectSpread$2({}, this.mediaConnection.getConfig()), {}, {\n iceServers\n });\n var options = this.mediaConnection.getSendReceiveOptions();\n var seq = this.roap.getSeq();\n var callback = this.mediaConnection.getMetricsCallback();\n this.stopRoapSession();\n this.closeMediaConnection();\n this.sdpNegotiationStarted = false;\n this.mediaConnection = this.createMediaConnection({\n mediaConnectionConfig: config,\n options,\n metricsCallback: callback,\n debugId: this.debugId\n });\n this.roap = this.createRoap(this.debugId, seq);\n if (initiateOffer) {\n return this.initiateOffer();\n }\n return Promise.resolve();\n }\n updateLocalTracks(tracks) {\n this.log('updateLocalTracks()', \"called with \".concat(JSON.stringify(tracks)));\n var newOfferNeeded = this.mediaConnection.updateLocalTracks(tracks);\n if (newOfferNeeded) {\n this.log('updateLocalTracks()', 'triggering offer...');\n return this.roap.initiateOffer();\n }\n return Promise.resolve();\n }\n updateDirection(direction) {\n this.log('updateDirection()', \"called with \".concat(JSON.stringify(direction)));\n var newOfferNeeded = this.mediaConnection.updateDirection(direction);\n if (newOfferNeeded) {\n this.log('updateDirection()', 'triggering offer...');\n return this.roap.initiateOffer();\n }\n return Promise.resolve();\n }\n updateRemoteQualityLevel(newValue) {\n this.log('updateRemoteQualityLevel()', \"called with \".concat(newValue));\n var newOfferNeeded = this.mediaConnection.updateRemoteQualityLevel(newValue);\n if (newOfferNeeded) {\n this.log('updateRemoteQualityLevel()', 'triggering offer...');\n return this.roap.initiateOffer();\n }\n return Promise.resolve();\n }\n update(options) {\n this.log('update()', \"called with \".concat(JSON.stringify(options)));\n var newOfferNeeded = this.mediaConnection.update(options);\n if (newOfferNeeded) {\n this.log('update()', 'triggering offer...');\n return this.roap.initiateOffer();\n }\n return Promise.resolve();\n }\n getPeerConnectionState() {\n return this.mediaConnection.getPeerConnectionState();\n }\n getIceConnectionState() {\n return this.mediaConnection.getIceConnectionState();\n }\n getConnectionState() {\n return this.mediaConnection.getConnectionState();\n }\n getIceGatheringState() {\n return this.mediaConnection.getIceGatheringState();\n }\n getStats() {\n return this.mediaConnection.getStats();\n }\n getTransceiverStats() {\n return this.mediaConnection.getTransceiverStats();\n }\n insertDTMF(tones, duration, interToneGap) {\n this.log('insertDTMF()', \"called with tones=\\\"\".concat(tones, \"\\\", duration=\").concat(duration, \", interToneGap=\").concat(interToneGap));\n this.mediaConnection.insertDTMF(tones, duration, interToneGap);\n }\n roapMessageReceived(roapMessage) {\n this.log('roapMessageReceived()', \"called with messageType=\".concat(roapMessage.messageType, \", seq=\").concat(roapMessage.seq));\n if (!this.sdpNegotiationStarted) {\n if (roapMessage.messageType === 'OFFER') {\n this.sdpNegotiationStarted = true;\n this.mediaConnection.initializeTransceivers(true);\n }\n if (roapMessage.messageType === 'OFFER_REQUEST') {\n this.sdpNegotiationStarted = true;\n this.mediaConnection.initializeTransceivers(false);\n }\n }\n this.roap.roapMessageReceived(roapMessage);\n }\n onRemoteTrack(event) {\n this.emit(MediaConnectionEventNames.REMOTE_TRACK_ADDED, event);\n }\n createLocalOffer() {\n return this.mediaConnection.createLocalOffer();\n }\n handleRemoteOffer(sdp) {\n return this.mediaConnection.handleRemoteOffer(sdp);\n }\n handleRemoteAnswer(sdp) {\n return this.mediaConnection.handleRemoteAnswer(sdp);\n }\n}\n\nfunction ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass MultistreamRoapMediaConnection extends EventEmitter$5 {\n constructor(mediaConnectionConfig, debugId) {\n var metricsCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};\n var closeCallback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : () => {};\n var sendMetricsCallback = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : () => {};\n super();\n _defineProperty(this, \"id\", void 0);\n _defineProperty(this, \"debugId\", void 0);\n _defineProperty(this, \"multistreamConnection\", void 0);\n _defineProperty(this, \"roap\", void 0);\n _defineProperty(this, \"sdpNegotiationStarted\", false);\n _defineProperty(this, \"closeCallback\", void 0);\n _defineProperty(this, \"sendMetricsCallback\", void 0);\n this.debugId = debugId;\n this.id = debugId || 'MultistreamRoapMediaConnection';\n configureWcmeLogger(debugId);\n this.log('constructor()', \"config: \".concat(JSON.stringify(mediaConnectionConfig)));\n this.multistreamConnection = this.createMultistreamConnection(mediaConnectionConfig, metricsCallback);\n this.roap = this.createRoap(debugId);\n this.closeCallback = closeCallback;\n this.sendMetricsCallback = sendMetricsCallback;\n }\n log(action, description) {\n getLogger().info(\"\".concat(this.id, \":\").concat(action, \" \").concat(description));\n }\n warn(action, description) {\n getLogger().warn(\"\".concat(this.id, \":\").concat(action, \" \").concat(description));\n }\n error(action, description, error) {\n getLogger().error(\"\".concat(this.id, \":\").concat(action, \" \").concat(description, \" \").concat(getErrorDescription(error)));\n }\n createMultistreamConnection(mediaConnectionConfig, metricsCallback) {\n this.log('createMultistreamConnection()', 'called');\n var multistreamConnection = new MultistreamConnection(_objectSpread$1(_objectSpread$1({}, mediaConnectionConfig), {}, {\n metricsCallback\n }));\n multistreamConnection.on(MultistreamConnectionEventNames.ActiveSpeakerNotification, csis => {\n this.emit(MediaConnectionEventNames.ACTIVE_SPEAKERS_CHANGED, csis);\n });\n multistreamConnection.on(MultistreamConnectionEventNames.AudioSourceCountUpdate, (numTotalSources, numLiveSources, mediaContent) => {\n this.emit(MediaConnectionEventNames.AUDIO_SOURCES_COUNT_CHANGED, numTotalSources, numLiveSources, mediaContent);\n });\n multistreamConnection.on(MultistreamConnectionEventNames.VideoSourceCountUpdate, (numTotalSources, numLiveSources, mediaContent) => {\n this.emit(MediaConnectionEventNames.VIDEO_SOURCES_COUNT_CHANGED, numTotalSources, numLiveSources, mediaContent);\n });\n multistreamConnection.on(MultistreamConnectionEventNames.PeerConnectionStateUpdate, state => {\n this.emit(MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED, {\n state\n });\n });\n multistreamConnection.on(MultistreamConnectionEventNames.IceConnectionStateUpdate, state => {\n this.emit(MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED, {\n state\n });\n });\n multistreamConnection.on(MultistreamConnectionEventNames.IceGatheringStateUpdate, state => {\n this.emit(MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED, {\n state\n });\n });\n multistreamConnection.on(MultistreamConnectionEventNames.NegotiationNeeded, () => {\n this.onNegotiationNeeded();\n });\n multistreamConnection.on(MultistreamConnectionEventNames.IceCandidate, event => {\n this.emit(MediaConnectionEventNames.ICE_CANDIDATE, {\n candidate: event.candidate\n });\n });\n multistreamConnection.on(MultistreamConnectionEventNames.IceCandidateError, event => {\n this.emit(MediaConnectionEventNames.ICE_CANDIDATE_ERROR, {\n error: event\n });\n });\n return multistreamConnection;\n }\n createRoap(debugId, seq) {\n var roap = new Roap(this.createLocalOffer.bind(this), this.handleRemoteOffer.bind(this), this.handleRemoteAnswer.bind(this), debugId, seq);\n roap.on(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event => this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event));\n roap.on(MediaConnectionEventNames.ROAP_STARTED, () => this.emit(MediaConnectionEventNames.ROAP_STARTED));\n roap.on(MediaConnectionEventNames.ROAP_DONE, () => this.emit(MediaConnectionEventNames.ROAP_DONE));\n roap.on(MediaConnectionEventNames.ROAP_FAILURE, error => this.emit(MediaConnectionEventNames.ROAP_FAILURE, error));\n return roap;\n }\n onNegotiationNeeded() {\n this.log('onNegotiationNeeded()', 'called');\n if (!this.sdpNegotiationStarted) {\n return Promise.resolve();\n }\n return this.roap.initiateOffer();\n }\n initiateOffer() {\n this.log('initiateOffer()', 'called');\n if (this.sdpNegotiationStarted) {\n this.error('initiateOffer()', 'SDP negotiation already started');\n return Promise.reject(new Error('SDP negotiation already started'));\n }\n this.sdpNegotiationStarted = true;\n return this.roap.initiateOffer();\n }\n close() {\n this.log('close()', 'called');\n this.closeMediaConnection();\n this.stopRoapSession();\n this.closeCallback();\n }\n forceRtcMetricsSend() {\n var _this = this;\n return _asyncToGenerator(function* () {\n var _this$multistreamConn;\n yield (_this$multistreamConn = _this.multistreamConnection) === null || _this$multistreamConn === void 0 ? void 0 : _this$multistreamConn.forceRtcMetricsCallback();\n _this.sendMetricsCallback();\n })();\n }\n closeMediaConnection() {\n this.multistreamConnection.close();\n this.multistreamConnection.removeAllListeners();\n }\n stopRoapSession() {\n this.roap.stop();\n this.roap.removeAllListeners();\n }\n reconnect(iceServers) {\n var initiateOffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n this.log('reconnect()', \"iceServers: \".concat(JSON.stringify(iceServers)));\n var seq = this.roap.getSeq();\n this.stopRoapSession();\n this.sdpNegotiationStarted = false;\n this.multistreamConnection.renewPeerConnection({\n iceServers\n });\n this.roap = this.createRoap(this.debugId, seq);\n if (initiateOffer) {\n return this.initiateOffer();\n }\n return Promise.resolve();\n }\n getConnectionState() {\n var connectionState = this.multistreamConnection.getConnectionState();\n this.log('getConnectionState()', \"called, returning \".concat(connectionState));\n return connectionState;\n }\n getPeerConnectionState() {\n return this.multistreamConnection.getPeerConnectionState();\n }\n getIceConnectionState() {\n return this.multistreamConnection.getIceConnectionState();\n }\n getStats() {\n return this.multistreamConnection.getStats();\n }\n getTransceiverStats() {\n return this.multistreamConnection.getTransceiverStats();\n }\n roapMessageReceived(roapMessage) {\n this.log('roapMessageReceived()', \"called with messageType=\".concat(roapMessage.messageType, \", seq=\").concat(roapMessage.seq));\n if (!this.sdpNegotiationStarted && roapMessage.messageType === 'OFFER') {\n throw new Error('incoming first offer is not supported by MultistreamRoapMediaConnection');\n }\n this.roap.roapMessageReceived(roapMessage);\n }\n createSendSlot(mediaType) {\n var active = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n this.log('createSendSlot()', \"called with mediaType=\".concat(mediaType, \", active=\").concat(active));\n return this.multistreamConnection.createSendSlot(mediaType, active);\n }\n createReceiveSlot(mediaType) {\n this.log('createReceiveSlot()', \"called\");\n return this.multistreamConnection.createReceiveSlot(mediaType);\n }\n requestMedia(mediaType, streamRequests) {\n this.log('requestMedia()', \"called\");\n return this.multistreamConnection.requestMedia(mediaType, streamRequests);\n }\n createLocalOffer() {\n this.log('createLocalOffer()', 'calling this.multistreamConnection.createOffer');\n return this.multistreamConnection.createOffer().then(result => {\n if (result.sdp) {\n this.emit(MediaConnectionEventNames.LOCAL_SDP_OFFER_GENERATED);\n return {\n sdp: result.sdp\n };\n }\n return Promise.reject(new SdpOfferCreationError('empty local SDP'));\n }).catch(error => {\n throw new SdpOfferCreationError(\"createLocalOffer() failure: \".concat(error.message), {\n cause: error\n });\n });\n }\n handleRemoteOffer() {\n return Promise.reject(new SdpOfferHandlingError('remote offers not supported by WCME'));\n }\n waitForIceCandidates() {\n this.log('waitForIceCandidates()', 'called');\n return new Promise((resolve, reject) => {\n if (this.multistreamConnection.getIceGatheringState() === 'complete') {\n resolve();\n return;\n }\n var timeout;\n var callback = event => {\n if (event === 'complete') {\n this.multistreamConnection.removeListener(MultistreamConnectionEventNames.IceGatheringStateUpdate, callback);\n clearTimeout(timeout);\n resolve();\n }\n };\n timeout = setTimeout(() => {\n this.multistreamConnection.removeListener(MultistreamConnectionEventNames.IceGatheringStateUpdate, callback);\n reject(new Error('Timed out waiting for ice candidates gathering'));\n }, 5000);\n this.multistreamConnection.addListener(MultistreamConnectionEventNames.IceGatheringStateUpdate, callback);\n });\n }\n handleRemoteAnswer(sdp) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n _this2.log('handleRemoteAnswer()', \"called: sdp=\".concat(sdp ? 'non-empty' : 'empty'));\n if (sdp) {\n try {\n yield _this2.waitForIceCandidates();\n } catch (e) {\n var {\n message\n } = e;\n _this2.warn('handleRemoteAnswer()', \"\".concat(message));\n }\n var mungedSdp = mungeRemoteSdp({}, sdp);\n _this2.log('handleRemoteAnswer()', 'calling this.multistreamConnection.setAnswer');\n return _this2.multistreamConnection.setAnswer(mungedSdp).then(result => {\n _this2.log('handleRemoteAnswer()', 'this.multistreamConnection.setAnswer resolved');\n _this2.emit(MediaConnectionEventNames.REMOTE_SDP_ANSWER_PROCESSED);\n return result;\n }).catch(error => {\n _this2.log('handleRemoteAnswer()', \"this.multistreamConnection.setAnswer failed\");\n throw new SdpAnswerHandlingError(\"handleRemoteAnswer() failure: \".concat(error.message), {\n cause: error\n });\n });\n }\n return Promise.reject(new SdpAnswerHandlingError('empty answer'));\n })();\n }\n getIceGatheringState() {\n return this.multistreamConnection.getIceGatheringState();\n }\n}\n\nvar Errors = Error$1;\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global$1 !== 'undefined' ? global$1 : typeof self !== 'undefined' ? self : {};\nfunction getDefaultExportFromCjs(x) {\n return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\nvar es5 = {\n exports: {}\n};\n(function (module, exports) {\n !function (e, t) {\n module.exports = t();\n }(commonjsGlobal, function () {\n return function (e) {\n var t = {};\n function r(n) {\n if (t[n]) return t[n].exports;\n var i = t[n] = {\n i: n,\n l: !1,\n exports: {}\n };\n return e[n].call(i.exports, i, i.exports, r), i.l = !0, i.exports;\n }\n return r.m = e, r.c = t, r.d = function (e, t, n) {\n r.o(e, t) || Object.defineProperty(e, t, {\n enumerable: !0,\n get: n\n });\n }, r.r = function (e) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(e, \"__esModule\", {\n value: !0\n });\n }, r.t = function (e, t) {\n if (1 & t && (e = r(e)), 8 & t) return e;\n if (4 & t && \"object\" == typeof e && e && e.__esModule) return e;\n var n = Object.create(null);\n if (r.r(n), Object.defineProperty(n, \"default\", {\n enumerable: !0,\n value: e\n }), 2 & t && \"string\" != typeof e) for (var i in e) {\n r.d(n, i, function (t) {\n return e[t];\n }.bind(null, i));\n }\n return n;\n }, r.n = function (e) {\n var t = e && e.__esModule ? function () {\n return e.default;\n } : function () {\n return e;\n };\n return r.d(t, \"a\", t), t;\n }, r.o = function (e, t) {\n return Object.prototype.hasOwnProperty.call(e, t);\n }, r.p = \"\", r(r.s = 90);\n }({\n 17: function _(e, t, r) {\n t.__esModule = !0, t.default = void 0;\n var n = r(18),\n i = function () {\n function e() {}\n return e.getFirstMatch = function (e, t) {\n var r = t.match(e);\n return r && r.length > 0 && r[1] || \"\";\n }, e.getSecondMatch = function (e, t) {\n var r = t.match(e);\n return r && r.length > 1 && r[2] || \"\";\n }, e.matchAndReturnConst = function (e, t, r) {\n if (e.test(t)) return r;\n }, e.getWindowsVersionName = function (e) {\n switch (e) {\n case \"NT\":\n return \"NT\";\n case \"XP\":\n return \"XP\";\n case \"NT 5.0\":\n return \"2000\";\n case \"NT 5.1\":\n return \"XP\";\n case \"NT 5.2\":\n return \"2003\";\n case \"NT 6.0\":\n return \"Vista\";\n case \"NT 6.1\":\n return \"7\";\n case \"NT 6.2\":\n return \"8\";\n case \"NT 6.3\":\n return \"8.1\";\n case \"NT 10.0\":\n return \"10\";\n default:\n return;\n }\n }, e.getMacOSVersionName = function (e) {\n var t = e.split(\".\").splice(0, 2).map(function (e) {\n return parseInt(e, 10) || 0;\n });\n if (t.push(0), 10 === t[0]) switch (t[1]) {\n case 5:\n return \"Leopard\";\n case 6:\n return \"Snow Leopard\";\n case 7:\n return \"Lion\";\n case 8:\n return \"Mountain Lion\";\n case 9:\n return \"Mavericks\";\n case 10:\n return \"Yosemite\";\n case 11:\n return \"El Capitan\";\n case 12:\n return \"Sierra\";\n case 13:\n return \"High Sierra\";\n case 14:\n return \"Mojave\";\n case 15:\n return \"Catalina\";\n default:\n return;\n }\n }, e.getAndroidVersionName = function (e) {\n var t = e.split(\".\").splice(0, 2).map(function (e) {\n return parseInt(e, 10) || 0;\n });\n if (t.push(0), !(1 === t[0] && t[1] < 5)) return 1 === t[0] && t[1] < 6 ? \"Cupcake\" : 1 === t[0] && t[1] >= 6 ? \"Donut\" : 2 === t[0] && t[1] < 2 ? \"Eclair\" : 2 === t[0] && 2 === t[1] ? \"Froyo\" : 2 === t[0] && t[1] > 2 ? \"Gingerbread\" : 3 === t[0] ? \"Honeycomb\" : 4 === t[0] && t[1] < 1 ? \"Ice Cream Sandwich\" : 4 === t[0] && t[1] < 4 ? \"Jelly Bean\" : 4 === t[0] && t[1] >= 4 ? \"KitKat\" : 5 === t[0] ? \"Lollipop\" : 6 === t[0] ? \"Marshmallow\" : 7 === t[0] ? \"Nougat\" : 8 === t[0] ? \"Oreo\" : 9 === t[0] ? \"Pie\" : void 0;\n }, e.getVersionPrecision = function (e) {\n return e.split(\".\").length;\n }, e.compareVersions = function (t, r, n) {\n void 0 === n && (n = !1);\n var i = e.getVersionPrecision(t),\n s = e.getVersionPrecision(r),\n a = Math.max(i, s),\n o = 0,\n u = e.map([t, r], function (t) {\n var r = a - e.getVersionPrecision(t),\n n = t + new Array(r + 1).join(\".0\");\n return e.map(n.split(\".\"), function (e) {\n return new Array(20 - e.length).join(\"0\") + e;\n }).reverse();\n });\n for (n && (o = a - Math.min(i, s)), a -= 1; a >= o;) {\n if (u[0][a] > u[1][a]) return 1;\n if (u[0][a] === u[1][a]) {\n if (a === o) return 0;\n a -= 1;\n } else if (u[0][a] < u[1][a]) return -1;\n }\n }, e.map = function (e, t) {\n var r,\n n = [];\n if (Array.prototype.map) return Array.prototype.map.call(e, t);\n for (r = 0; r < e.length; r += 1) {\n n.push(t(e[r]));\n }\n return n;\n }, e.find = function (e, t) {\n var r, n;\n if (Array.prototype.find) return Array.prototype.find.call(e, t);\n for (r = 0, n = e.length; r < n; r += 1) {\n var i = e[r];\n if (t(i, r)) return i;\n }\n }, e.assign = function (e) {\n for (var t, r, n = e, i = arguments.length, s = new Array(i > 1 ? i - 1 : 0), a = 1; a < i; a++) {\n s[a - 1] = arguments[a];\n }\n if (Object.assign) return Object.assign.apply(Object, [e].concat(s));\n var o = function o() {\n var e = s[t];\n \"object\" == typeof e && null !== e && Object.keys(e).forEach(function (t) {\n n[t] = e[t];\n });\n };\n for (t = 0, r = s.length; t < r; t += 1) {\n o();\n }\n return e;\n }, e.getBrowserAlias = function (e) {\n return n.BROWSER_ALIASES_MAP[e];\n }, e.getBrowserTypeByAlias = function (e) {\n return n.BROWSER_MAP[e] || \"\";\n }, e;\n }();\n t.default = i, e.exports = t.default;\n },\n 18: function _(e, t, r) {\n t.__esModule = !0, t.ENGINE_MAP = t.OS_MAP = t.PLATFORMS_MAP = t.BROWSER_MAP = t.BROWSER_ALIASES_MAP = void 0;\n t.BROWSER_ALIASES_MAP = {\n \"Amazon Silk\": \"amazon_silk\",\n \"Android Browser\": \"android\",\n Bada: \"bada\",\n BlackBerry: \"blackberry\",\n Chrome: \"chrome\",\n Chromium: \"chromium\",\n Electron: \"electron\",\n Epiphany: \"epiphany\",\n Firefox: \"firefox\",\n Focus: \"focus\",\n Generic: \"generic\",\n \"Google Search\": \"google_search\",\n Googlebot: \"googlebot\",\n \"Internet Explorer\": \"ie\",\n \"K-Meleon\": \"k_meleon\",\n Maxthon: \"maxthon\",\n \"Microsoft Edge\": \"edge\",\n \"MZ Browser\": \"mz\",\n \"NAVER Whale Browser\": \"naver\",\n Opera: \"opera\",\n \"Opera Coast\": \"opera_coast\",\n PhantomJS: \"phantomjs\",\n Puffin: \"puffin\",\n QupZilla: \"qupzilla\",\n QQ: \"qq\",\n QQLite: \"qqlite\",\n Safari: \"safari\",\n Sailfish: \"sailfish\",\n \"Samsung Internet for Android\": \"samsung_internet\",\n SeaMonkey: \"seamonkey\",\n Sleipnir: \"sleipnir\",\n Swing: \"swing\",\n Tizen: \"tizen\",\n \"UC Browser\": \"uc\",\n Vivaldi: \"vivaldi\",\n \"WebOS Browser\": \"webos\",\n WeChat: \"wechat\",\n \"Yandex Browser\": \"yandex\",\n Roku: \"roku\"\n };\n t.BROWSER_MAP = {\n amazon_silk: \"Amazon Silk\",\n android: \"Android Browser\",\n bada: \"Bada\",\n blackberry: \"BlackBerry\",\n chrome: \"Chrome\",\n chromium: \"Chromium\",\n electron: \"Electron\",\n epiphany: \"Epiphany\",\n firefox: \"Firefox\",\n focus: \"Focus\",\n generic: \"Generic\",\n googlebot: \"Googlebot\",\n google_search: \"Google Search\",\n ie: \"Internet Explorer\",\n k_meleon: \"K-Meleon\",\n maxthon: \"Maxthon\",\n edge: \"Microsoft Edge\",\n mz: \"MZ Browser\",\n naver: \"NAVER Whale Browser\",\n opera: \"Opera\",\n opera_coast: \"Opera Coast\",\n phantomjs: \"PhantomJS\",\n puffin: \"Puffin\",\n qupzilla: \"QupZilla\",\n qq: \"QQ Browser\",\n qqlite: \"QQ Browser Lite\",\n safari: \"Safari\",\n sailfish: \"Sailfish\",\n samsung_internet: \"Samsung Internet for Android\",\n seamonkey: \"SeaMonkey\",\n sleipnir: \"Sleipnir\",\n swing: \"Swing\",\n tizen: \"Tizen\",\n uc: \"UC Browser\",\n vivaldi: \"Vivaldi\",\n webos: \"WebOS Browser\",\n wechat: \"WeChat\",\n yandex: \"Yandex Browser\"\n };\n t.PLATFORMS_MAP = {\n tablet: \"tablet\",\n mobile: \"mobile\",\n desktop: \"desktop\",\n tv: \"tv\"\n };\n t.OS_MAP = {\n WindowsPhone: \"Windows Phone\",\n Windows: \"Windows\",\n MacOS: \"macOS\",\n iOS: \"iOS\",\n Android: \"Android\",\n WebOS: \"WebOS\",\n BlackBerry: \"BlackBerry\",\n Bada: \"Bada\",\n Tizen: \"Tizen\",\n Linux: \"Linux\",\n ChromeOS: \"Chrome OS\",\n PlayStation4: \"PlayStation 4\",\n Roku: \"Roku\"\n };\n t.ENGINE_MAP = {\n EdgeHTML: \"EdgeHTML\",\n Blink: \"Blink\",\n Trident: \"Trident\",\n Presto: \"Presto\",\n Gecko: \"Gecko\",\n WebKit: \"WebKit\"\n };\n },\n 90: function _(e, t, r) {\n t.__esModule = !0, t.default = void 0;\n var n,\n i = (n = r(91)) && n.__esModule ? n : {\n default: n\n },\n s = r(18);\n function a(e, t) {\n for (var r = 0; r < t.length; r++) {\n var n = t[r];\n n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), Object.defineProperty(e, n.key, n);\n }\n }\n var o = function () {\n function e() {}\n var t, r, n;\n return e.getParser = function (e, t) {\n if (void 0 === t && (t = !1), \"string\" != typeof e) throw new Error(\"UserAgent should be a string\");\n return new i.default(e, t);\n }, e.parse = function (e) {\n return new i.default(e).getResult();\n }, t = e, n = [{\n key: \"BROWSER_MAP\",\n get: function get() {\n return s.BROWSER_MAP;\n }\n }, {\n key: \"ENGINE_MAP\",\n get: function get() {\n return s.ENGINE_MAP;\n }\n }, {\n key: \"OS_MAP\",\n get: function get() {\n return s.OS_MAP;\n }\n }, {\n key: \"PLATFORMS_MAP\",\n get: function get() {\n return s.PLATFORMS_MAP;\n }\n }], (r = null) && a(t.prototype, r), n && a(t, n), e;\n }();\n t.default = o, e.exports = t.default;\n },\n 91: function _(e, t, r) {\n t.__esModule = !0, t.default = void 0;\n var n = u(r(92)),\n i = u(r(93)),\n s = u(r(94)),\n a = u(r(95)),\n o = u(r(17));\n function u(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var d = function () {\n function e(e, t) {\n if (void 0 === t && (t = !1), null == e || \"\" === e) throw new Error(\"UserAgent parameter can't be empty\");\n this._ua = e, this.parsedResult = {}, !0 !== t && this.parse();\n }\n var t = e.prototype;\n return t.getUA = function () {\n return this._ua;\n }, t.test = function (e) {\n return e.test(this._ua);\n }, t.parseBrowser = function () {\n var e = this;\n this.parsedResult.browser = {};\n var t = o.default.find(n.default, function (t) {\n if (\"function\" == typeof t.test) return t.test(e);\n if (t.test instanceof Array) return t.test.some(function (t) {\n return e.test(t);\n });\n throw new Error(\"Browser's test function is not valid\");\n });\n return t && (this.parsedResult.browser = t.describe(this.getUA())), this.parsedResult.browser;\n }, t.getBrowser = function () {\n return this.parsedResult.browser ? this.parsedResult.browser : this.parseBrowser();\n }, t.getBrowserName = function (e) {\n return e ? String(this.getBrowser().name).toLowerCase() || \"\" : this.getBrowser().name || \"\";\n }, t.getBrowserVersion = function () {\n return this.getBrowser().version;\n }, t.getOS = function () {\n return this.parsedResult.os ? this.parsedResult.os : this.parseOS();\n }, t.parseOS = function () {\n var e = this;\n this.parsedResult.os = {};\n var t = o.default.find(i.default, function (t) {\n if (\"function\" == typeof t.test) return t.test(e);\n if (t.test instanceof Array) return t.test.some(function (t) {\n return e.test(t);\n });\n throw new Error(\"Browser's test function is not valid\");\n });\n return t && (this.parsedResult.os = t.describe(this.getUA())), this.parsedResult.os;\n }, t.getOSName = function (e) {\n var t = this.getOS().name;\n return e ? String(t).toLowerCase() || \"\" : t || \"\";\n }, t.getOSVersion = function () {\n return this.getOS().version;\n }, t.getPlatform = function () {\n return this.parsedResult.platform ? this.parsedResult.platform : this.parsePlatform();\n }, t.getPlatformType = function (e) {\n void 0 === e && (e = !1);\n var t = this.getPlatform().type;\n return e ? String(t).toLowerCase() || \"\" : t || \"\";\n }, t.parsePlatform = function () {\n var e = this;\n this.parsedResult.platform = {};\n var t = o.default.find(s.default, function (t) {\n if (\"function\" == typeof t.test) return t.test(e);\n if (t.test instanceof Array) return t.test.some(function (t) {\n return e.test(t);\n });\n throw new Error(\"Browser's test function is not valid\");\n });\n return t && (this.parsedResult.platform = t.describe(this.getUA())), this.parsedResult.platform;\n }, t.getEngine = function () {\n return this.parsedResult.engine ? this.parsedResult.engine : this.parseEngine();\n }, t.getEngineName = function (e) {\n return e ? String(this.getEngine().name).toLowerCase() || \"\" : this.getEngine().name || \"\";\n }, t.parseEngine = function () {\n var e = this;\n this.parsedResult.engine = {};\n var t = o.default.find(a.default, function (t) {\n if (\"function\" == typeof t.test) return t.test(e);\n if (t.test instanceof Array) return t.test.some(function (t) {\n return e.test(t);\n });\n throw new Error(\"Browser's test function is not valid\");\n });\n return t && (this.parsedResult.engine = t.describe(this.getUA())), this.parsedResult.engine;\n }, t.parse = function () {\n return this.parseBrowser(), this.parseOS(), this.parsePlatform(), this.parseEngine(), this;\n }, t.getResult = function () {\n return o.default.assign({}, this.parsedResult);\n }, t.satisfies = function (e) {\n var t = this,\n r = {},\n n = 0,\n i = {},\n s = 0;\n if (Object.keys(e).forEach(function (t) {\n var a = e[t];\n \"string\" == typeof a ? (i[t] = a, s += 1) : \"object\" == typeof a && (r[t] = a, n += 1);\n }), n > 0) {\n var a = Object.keys(r),\n u = o.default.find(a, function (e) {\n return t.isOS(e);\n });\n if (u) {\n var d = this.satisfies(r[u]);\n if (void 0 !== d) return d;\n }\n var c = o.default.find(a, function (e) {\n return t.isPlatform(e);\n });\n if (c) {\n var f = this.satisfies(r[c]);\n if (void 0 !== f) return f;\n }\n }\n if (s > 0) {\n var l = Object.keys(i),\n h = o.default.find(l, function (e) {\n return t.isBrowser(e, !0);\n });\n if (void 0 !== h) return this.compareVersion(i[h]);\n }\n }, t.isBrowser = function (e, t) {\n void 0 === t && (t = !1);\n var r = this.getBrowserName().toLowerCase(),\n n = e.toLowerCase(),\n i = o.default.getBrowserTypeByAlias(n);\n return t && i && (n = i.toLowerCase()), n === r;\n }, t.compareVersion = function (e) {\n var t = [0],\n r = e,\n n = !1,\n i = this.getBrowserVersion();\n if (\"string\" == typeof i) return \">\" === e[0] || \"<\" === e[0] ? (r = e.substr(1), \"=\" === e[1] ? (n = !0, r = e.substr(2)) : t = [], \">\" === e[0] ? t.push(1) : t.push(-1)) : \"=\" === e[0] ? r = e.substr(1) : \"~\" === e[0] && (n = !0, r = e.substr(1)), t.indexOf(o.default.compareVersions(i, r, n)) > -1;\n }, t.isOS = function (e) {\n return this.getOSName(!0) === String(e).toLowerCase();\n }, t.isPlatform = function (e) {\n return this.getPlatformType(!0) === String(e).toLowerCase();\n }, t.isEngine = function (e) {\n return this.getEngineName(!0) === String(e).toLowerCase();\n }, t.is = function (e, t) {\n return void 0 === t && (t = !1), this.isBrowser(e, t) || this.isOS(e) || this.isPlatform(e);\n }, t.some = function (e) {\n var t = this;\n return void 0 === e && (e = []), e.some(function (e) {\n return t.is(e);\n });\n }, e;\n }();\n t.default = d, e.exports = t.default;\n },\n 92: function _(e, t, r) {\n t.__esModule = !0, t.default = void 0;\n var n,\n i = (n = r(17)) && n.__esModule ? n : {\n default: n\n };\n var s = /version\\/(\\d+(\\.?_?\\d+)+)/i,\n a = [{\n test: [/googlebot/i],\n describe: function describe(e) {\n var t = {\n name: \"Googlebot\"\n },\n r = i.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/opera/i],\n describe: function describe(e) {\n var t = {\n name: \"Opera\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/opr\\/|opios/i],\n describe: function describe(e) {\n var t = {\n name: \"Opera\"\n },\n r = i.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/SamsungBrowser/i],\n describe: function describe(e) {\n var t = {\n name: \"Samsung Internet for Android\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/Whale/i],\n describe: function describe(e) {\n var t = {\n name: \"NAVER Whale Browser\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/MZBrowser/i],\n describe: function describe(e) {\n var t = {\n name: \"MZ Browser\"\n },\n r = i.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/focus/i],\n describe: function describe(e) {\n var t = {\n name: \"Focus\"\n },\n r = i.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/swing/i],\n describe: function describe(e) {\n var t = {\n name: \"Swing\"\n },\n r = i.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/coast/i],\n describe: function describe(e) {\n var t = {\n name: \"Opera Coast\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/opt\\/\\d+(?:.?_?\\d+)+/i],\n describe: function describe(e) {\n var t = {\n name: \"Opera Touch\"\n },\n r = i.default.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/yabrowser/i],\n describe: function describe(e) {\n var t = {\n name: \"Yandex Browser\"\n },\n r = i.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/ucbrowser/i],\n describe: function describe(e) {\n var t = {\n name: \"UC Browser\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/Maxthon|mxios/i],\n describe: function describe(e) {\n var t = {\n name: \"Maxthon\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/epiphany/i],\n describe: function describe(e) {\n var t = {\n name: \"Epiphany\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/puffin/i],\n describe: function describe(e) {\n var t = {\n name: \"Puffin\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/sleipnir/i],\n describe: function describe(e) {\n var t = {\n name: \"Sleipnir\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/k-meleon/i],\n describe: function describe(e) {\n var t = {\n name: \"K-Meleon\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/micromessenger/i],\n describe: function describe(e) {\n var t = {\n name: \"WeChat\"\n },\n r = i.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/qqbrowser/i],\n describe: function describe(e) {\n var t = {\n name: /qqbrowserlite/i.test(e) ? \"QQ Browser Lite\" : \"QQ Browser\"\n },\n r = i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/msie|trident/i],\n describe: function describe(e) {\n var t = {\n name: \"Internet Explorer\"\n },\n r = i.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/\\sedg\\//i],\n describe: function describe(e) {\n var t = {\n name: \"Microsoft Edge\"\n },\n r = i.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/edg([ea]|ios)/i],\n describe: function describe(e) {\n var t = {\n name: \"Microsoft Edge\"\n },\n r = i.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/vivaldi/i],\n describe: function describe(e) {\n var t = {\n name: \"Vivaldi\"\n },\n r = i.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/seamonkey/i],\n describe: function describe(e) {\n var t = {\n name: \"SeaMonkey\"\n },\n r = i.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/sailfish/i],\n describe: function describe(e) {\n var t = {\n name: \"Sailfish\"\n },\n r = i.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/silk/i],\n describe: function describe(e) {\n var t = {\n name: \"Amazon Silk\"\n },\n r = i.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/phantom/i],\n describe: function describe(e) {\n var t = {\n name: \"PhantomJS\"\n },\n r = i.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/slimerjs/i],\n describe: function describe(e) {\n var t = {\n name: \"SlimerJS\"\n },\n r = i.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n describe: function describe(e) {\n var t = {\n name: \"BlackBerry\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/(web|hpw)[o0]s/i],\n describe: function describe(e) {\n var t = {\n name: \"WebOS Browser\"\n },\n r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/bada/i],\n describe: function describe(e) {\n var t = {\n name: \"Bada\"\n },\n r = i.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/tizen/i],\n describe: function describe(e) {\n var t = {\n name: \"Tizen\"\n },\n r = i.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/qupzilla/i],\n describe: function describe(e) {\n var t = {\n name: \"QupZilla\"\n },\n r = i.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/firefox|iceweasel|fxios/i],\n describe: function describe(e) {\n var t = {\n name: \"Firefox\"\n },\n r = i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/electron/i],\n describe: function describe(e) {\n var t = {\n name: \"Electron\"\n },\n r = i.default.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/MiuiBrowser/i],\n describe: function describe(e) {\n var t = {\n name: \"Miui\"\n },\n r = i.default.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/chromium/i],\n describe: function describe(e) {\n var t = {\n name: \"Chromium\"\n },\n r = i.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i, e) || i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/chrome|crios|crmo/i],\n describe: function describe(e) {\n var t = {\n name: \"Chrome\"\n },\n r = i.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/GSA/i],\n describe: function describe(e) {\n var t = {\n name: \"Google Search\"\n },\n r = i.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: function test(e) {\n var t = !e.test(/like android/i),\n r = e.test(/android/i);\n return t && r;\n },\n describe: function describe(e) {\n var t = {\n name: \"Android Browser\"\n },\n r = i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/playstation 4/i],\n describe: function describe(e) {\n var t = {\n name: \"PlayStation 4\"\n },\n r = i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/safari|applewebkit/i],\n describe: function describe(e) {\n var t = {\n name: \"Safari\"\n },\n r = i.default.getFirstMatch(s, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/.*/i],\n describe: function describe(e) {\n var t = -1 !== e.search(\"\\\\(\") ? /^(.*)\\/(.*)[ \\t]\\((.*)/ : /^(.*)\\/(.*) /;\n return {\n name: i.default.getFirstMatch(t, e),\n version: i.default.getSecondMatch(t, e)\n };\n }\n }];\n t.default = a, e.exports = t.default;\n },\n 93: function _(e, t, r) {\n t.__esModule = !0, t.default = void 0;\n var n,\n i = (n = r(17)) && n.__esModule ? n : {\n default: n\n },\n s = r(18);\n var a = [{\n test: [/Roku\\/DVP/],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i, e);\n return {\n name: s.OS_MAP.Roku,\n version: t\n };\n }\n }, {\n test: [/windows phone/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i, e);\n return {\n name: s.OS_MAP.WindowsPhone,\n version: t\n };\n }\n }, {\n test: [/windows /i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i, e),\n r = i.default.getWindowsVersionName(t);\n return {\n name: s.OS_MAP.Windows,\n version: t,\n versionName: r\n };\n }\n }, {\n test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n describe: function describe(e) {\n var t = {\n name: s.OS_MAP.iOS\n },\n r = i.default.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/macintosh/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i, e).replace(/[_\\s]/g, \".\"),\n r = i.default.getMacOSVersionName(t),\n n = {\n name: s.OS_MAP.MacOS,\n version: t\n };\n return r && (n.versionName = r), n;\n }\n }, {\n test: [/(ipod|iphone|ipad)/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i, e).replace(/[_\\s]/g, \".\");\n return {\n name: s.OS_MAP.iOS,\n version: t\n };\n }\n }, {\n test: function test(e) {\n var t = !e.test(/like android/i),\n r = e.test(/android/i);\n return t && r;\n },\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i, e),\n r = i.default.getAndroidVersionName(t),\n n = {\n name: s.OS_MAP.Android,\n version: t\n };\n return r && (n.versionName = r), n;\n }\n }, {\n test: [/(web|hpw)[o0]s/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i, e),\n r = {\n name: s.OS_MAP.WebOS\n };\n return t && t.length && (r.version = t), r;\n }\n }, {\n test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i, e) || i.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i, e) || i.default.getFirstMatch(/\\bbb(\\d+)/i, e);\n return {\n name: s.OS_MAP.BlackBerry,\n version: t\n };\n }\n }, {\n test: [/bada/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i, e);\n return {\n name: s.OS_MAP.Bada,\n version: t\n };\n }\n }, {\n test: [/tizen/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i, e);\n return {\n name: s.OS_MAP.Tizen,\n version: t\n };\n }\n }, {\n test: [/linux/i],\n describe: function describe() {\n return {\n name: s.OS_MAP.Linux\n };\n }\n }, {\n test: [/CrOS/],\n describe: function describe() {\n return {\n name: s.OS_MAP.ChromeOS\n };\n }\n }, {\n test: [/PlayStation 4/],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i, e);\n return {\n name: s.OS_MAP.PlayStation4,\n version: t\n };\n }\n }];\n t.default = a, e.exports = t.default;\n },\n 94: function _(e, t, r) {\n t.__esModule = !0, t.default = void 0;\n var n,\n i = (n = r(17)) && n.__esModule ? n : {\n default: n\n },\n s = r(18);\n var a = [{\n test: [/googlebot/i],\n describe: function describe() {\n return {\n type: \"bot\",\n vendor: \"Google\"\n };\n }\n }, {\n test: [/huawei/i],\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/(can-l01)/i, e) && \"Nova\",\n r = {\n type: s.PLATFORMS_MAP.mobile,\n vendor: \"Huawei\"\n };\n return t && (r.model = t), r;\n }\n }, {\n test: [/nexus\\s*(?:7|8|9|10).*/i],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tablet,\n vendor: \"Nexus\"\n };\n }\n }, {\n test: [/ipad/i],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tablet,\n vendor: \"Apple\",\n model: \"iPad\"\n };\n }\n }, {\n test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tablet,\n vendor: \"Apple\",\n model: \"iPad\"\n };\n }\n }, {\n test: [/kftt build/i],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tablet,\n vendor: \"Amazon\",\n model: \"Kindle Fire HD 7\"\n };\n }\n }, {\n test: [/silk/i],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tablet,\n vendor: \"Amazon\"\n };\n }\n }, {\n test: [/tablet(?! pc)/i],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tablet\n };\n }\n }, {\n test: function test(e) {\n var t = e.test(/ipod|iphone/i),\n r = e.test(/like (ipod|iphone)/i);\n return t && !r;\n },\n describe: function describe(e) {\n var t = i.default.getFirstMatch(/(ipod|iphone)/i, e);\n return {\n type: s.PLATFORMS_MAP.mobile,\n vendor: \"Apple\",\n model: t\n };\n }\n }, {\n test: [/nexus\\s*[0-6].*/i, /galaxy nexus/i],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.mobile,\n vendor: \"Nexus\"\n };\n }\n }, {\n test: [/[^-]mobi/i],\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.mobile\n };\n }\n }, {\n test: function test(e) {\n return \"blackberry\" === e.getBrowserName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.mobile,\n vendor: \"BlackBerry\"\n };\n }\n }, {\n test: function test(e) {\n return \"bada\" === e.getBrowserName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.mobile\n };\n }\n }, {\n test: function test(e) {\n return \"windows phone\" === e.getBrowserName();\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.mobile,\n vendor: \"Microsoft\"\n };\n }\n }, {\n test: function test(e) {\n var t = Number(String(e.getOSVersion()).split(\".\")[0]);\n return \"android\" === e.getOSName(!0) && t >= 3;\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tablet\n };\n }\n }, {\n test: function test(e) {\n return \"android\" === e.getOSName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.mobile\n };\n }\n }, {\n test: function test(e) {\n return \"macos\" === e.getOSName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.desktop,\n vendor: \"Apple\"\n };\n }\n }, {\n test: function test(e) {\n return \"windows\" === e.getOSName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.desktop\n };\n }\n }, {\n test: function test(e) {\n return \"linux\" === e.getOSName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.desktop\n };\n }\n }, {\n test: function test(e) {\n return \"playstation 4\" === e.getOSName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tv\n };\n }\n }, {\n test: function test(e) {\n return \"roku\" === e.getOSName(!0);\n },\n describe: function describe() {\n return {\n type: s.PLATFORMS_MAP.tv\n };\n }\n }];\n t.default = a, e.exports = t.default;\n },\n 95: function _(e, t, r) {\n t.__esModule = !0, t.default = void 0;\n var n,\n i = (n = r(17)) && n.__esModule ? n : {\n default: n\n },\n s = r(18);\n var a = [{\n test: function test(e) {\n return \"microsoft edge\" === e.getBrowserName(!0);\n },\n describe: function describe(e) {\n if (/\\sedg\\//i.test(e)) return {\n name: s.ENGINE_MAP.Blink\n };\n var t = i.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return {\n name: s.ENGINE_MAP.EdgeHTML,\n version: t\n };\n }\n }, {\n test: [/trident/i],\n describe: function describe(e) {\n var t = {\n name: s.ENGINE_MAP.Trident\n },\n r = i.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: function test(e) {\n return e.test(/presto/i);\n },\n describe: function describe(e) {\n var t = {\n name: s.ENGINE_MAP.Presto\n },\n r = i.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: function test(e) {\n var t = e.test(/gecko/i),\n r = e.test(/like gecko/i);\n return t && !r;\n },\n describe: function describe(e) {\n var t = {\n name: s.ENGINE_MAP.Gecko\n },\n r = i.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }, {\n test: [/(apple)?webkit\\/537\\.36/i],\n describe: function describe() {\n return {\n name: s.ENGINE_MAP.Blink\n };\n }\n }, {\n test: [/(apple)?webkit/i],\n describe: function describe(e) {\n var t = {\n name: s.ENGINE_MAP.WebKit\n },\n r = i.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i, e);\n return r && (t.version = r), t;\n }\n }];\n t.default = a, e.exports = t.default;\n }\n });\n });\n})(es5);\nvar Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);\nvar BrowserName;\n(function (BrowserName) {\n BrowserName[\"CHROME\"] = \"Chrome\";\n BrowserName[\"FIREFOX\"] = \"Firefox\";\n BrowserName[\"EDGE\"] = \"Microsoft Edge\";\n BrowserName[\"SAFARI\"] = \"Safari\";\n})(BrowserName || (BrowserName = {}));\nvar OSName;\n(function (OSName) {\n OSName[\"WINDOWS\"] = \"Windows\";\n OSName[\"MAC\"] = \"macOS\";\n OSName[\"LINUX\"] = \"Linux\";\n})(OSName || (OSName = {}));\nBowser.getParser(window.navigator.userAgent);\nclass CpuInfo {\n static getNumLogicalCores() {\n return navigator.hardwareConcurrency;\n }\n}\nvar CapabilityState;\n(function (CapabilityState) {\n CapabilityState[\"NOT_CAPABLE\"] = \"not capable\";\n CapabilityState[\"CAPABLE\"] = \"capable\";\n CapabilityState[\"UNKNOWN\"] = \"unknown\";\n})(CapabilityState || (CapabilityState = {}));\n\nvar NetworkType;\n(function (NetworkType) {\n NetworkType[\"VPN\"] = \"vpn\";\n NetworkType[\"UNKNOWN\"] = \"unknown\";\n NetworkType[\"WIFI\"] = \"wifi\";\n NetworkType[\"ETHERNET\"] = \"ethernet\";\n})(NetworkType || (NetworkType = {}));\nvar MediaDevices;\n(function (MediaDevices) {\n MediaDevices[\"MICROPHONE\"] = \"microphone\";\n MediaDevices[\"SPEAKER\"] = \"speaker\";\n MediaDevices[\"CAMERA\"] = \"camera\";\n})(MediaDevices || (MediaDevices = {}));\nvar MediaDirection;\n(function (MediaDirection) {\n MediaDirection[\"SEND\"] = \"send\";\n MediaDirection[\"RECEIVE\"] = \"recv\";\n})(MediaDirection || (MediaDirection = {}));\nvar IpType;\n(function (IpType) {\n IpType[\"REMOTE\"] = \"remote\";\n IpType[\"LOCAL\"] = \"local\";\n})(IpType || (IpType = {}));\n\nvar STATS_DEFAULT = {\n encryption: 'sha-256',\n bandwidth: {\n systemBandwidth: 0,\n sentPerSecond: 0,\n encodedPerSecond: 0,\n helper: {\n audioBytesSent: 0,\n videoBytesSent: 0\n },\n speed: 0\n },\n results: {},\n connectionType: {\n systemNetworkType: 'unknown',\n systemIpAddress: '0.0.0.0',\n local: {\n candidateType: 'host',\n transport: 'UDP',\n networkType: NetworkType.UNKNOWN\n },\n remote: {\n candidateType: 'host',\n transport: 'UDP',\n networkType: NetworkType.UNKNOWN\n }\n },\n resolutions: {},\n internal: {\n remote: {},\n candidates: {}\n }\n};\nvar DEFAULT_GET_STATS_FILTER = {\n types: ['track', 'transport', 'candidate-pair', 'outbound-rtp', 'outboundrtp', 'inbound-rtp', 'inboundrtp', 'remote-inbound-rtp', 'remote-outbound-rtp', 'remote-candidate', 'local-candidate', 'media-source']\n};\nvar MQA_INTERVAL = 60000;\nvar _UNKNOWN_ = 'UNKNOWN';\nvar emptyMqaInterval = {\n audioReceive: [],\n audioTransmit: [],\n intervalMetadata: {\n peerReflexiveIP: '0.0.0.0',\n peripherals: [],\n cpuInfo: {\n numberOfCores: 1,\n description: 'NA',\n architecture: 'unknown'\n },\n processAverageCPU: 0,\n processMaximumCPU: 0,\n systemAverageCPU: 0,\n systemMaximumCPU: 0,\n screenWidth: 0,\n screenHeight: 0,\n screenResolution: 0,\n appWindowWidth: 0,\n appWindowHeight: 0,\n appWindowSize: 0\n },\n networkType: '',\n intervalNumber: 0,\n videoReceive: [],\n videoTransmit: []\n};\nvar emptyAudioReceive = {\n common: {\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false\n },\n dtlsBitrate: 0,\n dtlsPackets: 0,\n fecBitrate: 0,\n fecPackets: 0,\n maxBitrate: 0,\n mediaHopByHopLost: 0,\n rtcpBitrate: 0,\n rtcpPackets: 0,\n rtpBitrate: 0,\n rtpHopByHopLost: 0,\n rtpPackets: 0,\n rtpRecovered: 0,\n rtxBitrate: 0,\n rtxPackets: 0,\n srtcpUnprotectErrors: 0,\n srtpUnprotectErrors: 0,\n stunBitrate: 0,\n stunPackets: 0,\n transportType: 'UDP'\n },\n streams: []\n};\nvar emptyAudioReceiveStream = {\n common: {\n codec: 'opus',\n concealedFrames: 0,\n csi: [],\n maxConcealRunLength: 0,\n optimalBitrate: 0,\n optimalFrameRate: 0,\n receivedBitrate: 0,\n receivedFrameRate: 0,\n renderedFrameRate: 0,\n requestedBitrate: 0,\n requestedFrameRate: 0,\n rtpEndToEndLost: 0,\n maxRtpJitter: 0,\n meanRtpJitter: 0,\n rtpPackets: 0,\n ssci: 0\n }\n};\nvar emptyAudioTransmit = {\n common: {\n availableBitrate: 0,\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false\n },\n dtlsBitrate: 0,\n dtlsPackets: 0,\n fecBitrate: 0,\n fecPackets: 0,\n maxBitrate: 0,\n queueDelay: 0,\n remoteJitter: 0,\n remoteLossRate: 0,\n roundTripTime: 0,\n rtcpBitrate: 0,\n rtcpPackets: 0,\n rtpBitrate: 0,\n rtpPackets: 0,\n rtxBitrate: 0,\n rtxPackets: 0,\n stunBitrate: 0,\n stunPackets: 0,\n transportType: 'UDP'\n },\n streams: []\n};\nvar emptyAudioTransmitStream = {\n common: {\n codec: 'opus',\n csi: [],\n requestedBitrate: 0,\n requestedFrames: 0,\n rtpPackets: 0,\n ssci: 0,\n transmittedBitrate: 0,\n transmittedFrameRate: 0\n }\n};\nvar emptyVideoReceive = {\n common: {\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false\n },\n dtlsBitrate: 0,\n dtlsPackets: 0,\n fecBitrate: 0,\n fecPackets: 0,\n maxBitrate: 0,\n mediaHopByHopLost: 0,\n rtcpBitrate: 0,\n rtcpPackets: 0,\n rtpBitrate: 0,\n rtpHopByHopLost: 0,\n rtpPackets: 0,\n rtpRecovered: 0,\n rtxBitrate: 0,\n rtxPackets: 0,\n srtcpUnprotectErrors: 0,\n srtpUnprotectErrors: 0,\n stunBitrate: 0,\n stunPackets: 0,\n transportType: 'UDP'\n },\n streams: []\n};\nvar emptyVideoReceiveStream = {\n common: {\n codec: 'H264',\n concealedFrames: 0,\n csi: [],\n maxConcealRunLength: 0,\n optimalBitrate: 0,\n optimalFrameRate: 0,\n receivedBitrate: 0,\n receivedFrameRate: 0,\n renderedFrameRate: 0,\n requestedBitrate: 0,\n requestedFrameRate: 0,\n rtpEndToEndLost: 0,\n maxRtpJitter: 0,\n meanRtpJitter: 0,\n rtpPackets: 0,\n ssci: 0\n },\n h264CodecProfile: 'BP',\n isActiveSpeaker: false,\n optimalFrameSize: 0,\n receivedFrameSize: 0,\n receivedHeight: 0,\n receivedKeyFrames: 0,\n receivedKeyFramesForRequest: 0,\n receivedKeyFramesSourceChange: 0,\n receivedKeyFramesUnknown: 0,\n receivedWidth: 0,\n requestedFrameSize: 0,\n requestedKeyFrames: 0\n};\nvar emptyVideoTransmit = {\n common: {\n availableBitrate: 0,\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false\n },\n dtlsBitrate: 0,\n dtlsPackets: 0,\n fecBitrate: 0,\n fecPackets: 0,\n maxBitrate: 0,\n queueDelay: 0,\n remoteJitter: 0,\n remoteLossRate: 0,\n roundTripTime: 0,\n rtcpBitrate: 0,\n rtcpPackets: 0,\n rtpBitrate: 0,\n rtpPackets: 0,\n rtxBitrate: 0,\n rtxPackets: 0,\n stunBitrate: 0,\n stunPackets: 0,\n transportType: 'UDP'\n },\n streams: []\n};\nvar emptyVideoTransmitStream = {\n common: {\n codec: 'H264',\n csi: [],\n duplicateSsci: 0,\n requestedBitrate: 0,\n requestedFrames: 0,\n rtpPackets: 0,\n ssci: 0,\n transmittedBitrate: 0,\n transmittedFrameRate: 0\n },\n h264CodecProfile: 'BP',\n isAvatar: false,\n isHardwareEncoded: false,\n localConfigurationChanges: 2,\n maxFrameQp: 0,\n maxNoiseLevel: 0,\n minRegionQp: 0,\n remoteConfigurationChanges: 0,\n requestedFrameSize: 0,\n requestedKeyFrames: 0,\n transmittedFrameSize: 0,\n transmittedHeight: 0,\n transmittedKeyFrames: 0,\n transmittedKeyFramesClient: 0,\n transmittedKeyFramesConfigurationChange: 0,\n transmittedKeyFramesFeedback: 0,\n transmittedKeyFramesLocalDrop: 0,\n transmittedKeyFramesOtherLayer: 0,\n transmittedKeyFramesPeriodic: 0,\n transmittedKeyFramesSceneChange: 0,\n transmittedKeyFramesStartup: 0,\n transmittedKeyFramesUnknown: 0,\n transmittedWidth: 0\n};\nvar emptySender = {\n trackLabel: '',\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: []\n};\nvar emptyReceiver = {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: []\n};\nvar VIDEO_FRAME_RATE_MULTIPLIER = 100;\nvar NOISE_REDUCTION_MODE = {\n NONE: 'AUDIO_BACKGROUND_NOISE_REDUCTION_NONE',\n LOW_POWER: 'AUDIO_BACKGROUND_NOISE_REDUCTION_LOW_POWER'\n};\nvar VIRTUAL_BACKGROUND_MODE = {\n NONE: 'VIDEO_BACKGROUND_AUGMENT_NONE',\n BLUR: 'VIDEO_BACKGROUND_AUGMENT_BLUR',\n REPLACE_IMAGE: 'VIDEO_BACKGROUND_AUGMENT_REPLACE_IMAGE',\n REPLACE_VIDEO: 'VIDEO_BACKGROUND_AUGMENT_REPLACE_VIDEO'\n};\n\nvar max = array => {\n if (array.length === 0) {\n return 0;\n }\n return Math.max(...array);\n};\nvar mean = array => {\n if (array.length === 0) {\n return 0;\n }\n return array.reduce((a, b) => a + b) / array.length;\n};\nvar getTotalValueFromBaseType = (stats, sendrecvType, baseMediaType, value) => Object.keys(stats).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => {\n var _stats$mt, _stats$mt$sendrecvTyp;\n return acc + (((_stats$mt = stats[mt]) === null || _stats$mt === void 0 ? void 0 : (_stats$mt$sendrecvTyp = _stats$mt[sendrecvType]) === null || _stats$mt$sendrecvTyp === void 0 ? void 0 : _stats$mt$sendrecvTyp[value]) || 0);\n}, 0);\nvar getAudioReceiverMqa = _ref => {\n var {\n audioReceiver,\n statsResults,\n lastMqaDataSent,\n baseMediaType,\n isMultistream\n } = _ref;\n var sendrecvType = MediaDirection.RECEIVE;\n var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n var lastPacketsReceived = getLastTotalValue('totalPacketsReceived');\n var lastPacketsLost = getLastTotalValue('totalPacketsLost');\n var lastBytesReceived = getLastTotalValue('totalBytesReceived');\n var lastFecPacketsReceived = getLastTotalValue('fecPacketsReceived');\n var lastFecPacketsDiscarded = getLastTotalValue('fecPacketsDiscarded');\n var totalPacketsReceived = getTotalValue('totalPacketsReceived');\n var packetsLost = getTotalValue('totalPacketsLost');\n var totalBytesReceived = getTotalValue('totalBytesReceived');\n var totalFecPacketsReceived = getTotalValue('fecPacketsReceived');\n var totalFecPacketsDiscarded = getTotalValue('fecPacketsDiscarded');\n var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));\n if (mediaTypeKey) {\n var _statsResults$mediaTy;\n audioReceiver.common.common.direction = ((_statsResults$mediaTy = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy === void 0 ? void 0 : _statsResults$mediaTy.direction) || 'inactive';\n } else {\n audioReceiver.common.common.direction = 'inactive';\n }\n audioReceiver.common.common.isMain = !baseMediaType.includes('-share');\n audioReceiver.common.common.multistreamEnabled = isMultistream;\n audioReceiver.common.transportType = statsResults.connectionType.local.transport;\n audioReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived;\n var totalPacketsLost = packetsLost - lastPacketsLost;\n audioReceiver.common.mediaHopByHopLost = totalPacketsLost;\n audioReceiver.common.rtpHopByHopLost = totalPacketsLost;\n var fecRecovered = totalFecPacketsReceived - lastFecPacketsReceived - (totalFecPacketsDiscarded - lastFecPacketsDiscarded);\n audioReceiver.common.fecPackets = totalFecPacketsReceived - lastFecPacketsReceived;\n audioReceiver.common.rtpRecovered = fecRecovered;\n audioReceiver.common.rtpBitrate = (totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;\n};\nvar getAudioReceiverStreamMqa = _ref2 => {\n var _lastMqaDataSent$medi, _lastMqaDataSent$medi2, _lastMqaDataSent$medi3, _lastMqaDataSent$medi4, _lastMqaDataSent$medi5, _lastMqaDataSent$medi6, _lastMqaDataSent$medi7, _lastMqaDataSent$medi8, _statsResults$mediaTy2, _statsResults$mediaTy3;\n var {\n audioReceiverStream,\n statsResults,\n lastMqaDataSent,\n mediaType\n } = _ref2;\n var sendrecvType = MediaDirection.RECEIVE;\n var lastPacketsDecoded = ((_lastMqaDataSent$medi = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi === void 0 ? void 0 : _lastMqaDataSent$medi[sendrecvType].totalSamplesDecoded) || 0;\n var lastSamplesReceived = ((_lastMqaDataSent$medi2 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi2 === void 0 ? void 0 : _lastMqaDataSent$medi2[sendrecvType].totalSamplesReceived) || 0;\n var lastConcealedSamples = ((_lastMqaDataSent$medi3 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi3 === void 0 ? void 0 : _lastMqaDataSent$medi3[sendrecvType].concealedSamples) || 0;\n var lastBytesReceived = ((_lastMqaDataSent$medi4 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi4 === void 0 ? void 0 : _lastMqaDataSent$medi4[sendrecvType].totalBytesReceived) || 0;\n var lastFecPacketsReceived = ((_lastMqaDataSent$medi5 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi5 === void 0 ? void 0 : _lastMqaDataSent$medi5[sendrecvType].fecPacketsReceived) || 0;\n var lastFecPacketsDiscarded = ((_lastMqaDataSent$medi6 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi6 === void 0 ? void 0 : _lastMqaDataSent$medi6[sendrecvType].fecPacketsDiscarded) || 0;\n var lastPacketsReceived = ((_lastMqaDataSent$medi7 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi7 === void 0 ? void 0 : _lastMqaDataSent$medi7[sendrecvType].totalPacketsReceived) || 0;\n var lastPacketsLost = ((_lastMqaDataSent$medi8 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi8 === void 0 ? void 0 : _lastMqaDataSent$medi8[sendrecvType].totalPacketsLost) || 0;\n var {\n csi\n } = statsResults[mediaType];\n if (csi && !audioReceiverStream.common.csi.includes(csi)) {\n audioReceiverStream.common.csi.push(csi);\n }\n audioReceiverStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\n audioReceiverStream.common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;\n audioReceiverStream.common.meanRtpJitter = mean(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;\n var fecRecovered = statsResults[mediaType][sendrecvType].fecPacketsReceived - lastFecPacketsReceived - (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastFecPacketsDiscarded);\n audioReceiverStream.common.rtpEndToEndLost = statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;\n audioReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;\n audioReceiverStream.common.renderedFrameRate = audioReceiverStream.common.framesDropped * 100 / 60 || 0;\n audioReceiverStream.common.framesReceived = statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;\n audioReceiverStream.common.concealedFrames = statsResults[mediaType][sendrecvType].concealedSamples - lastConcealedSamples || 0;\n audioReceiverStream.common.receivedBitrate = (statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;\n audioReceiverStream.common.requestedBitrate = (_statsResults$mediaTy2 = statsResults[mediaType][sendrecvType].requestedBitrate) !== null && _statsResults$mediaTy2 !== void 0 ? _statsResults$mediaTy2 : -1;\n audioReceiverStream.common.requestedFrameRate = (_statsResults$mediaTy3 = statsResults[mediaType][sendrecvType].requestedFrameRate) !== null && _statsResults$mediaTy3 !== void 0 ? _statsResults$mediaTy3 : -1;\n};\nvar getAudioSenderMqa = _ref3 => {\n var {\n audioSender,\n statsResults,\n lastMqaDataSent,\n baseMediaType,\n isMultistream\n } = _ref3;\n var sendrecvType = MediaDirection.SEND;\n var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n var lastPacketsSent = getLastTotalValue('totalPacketsSent');\n var lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');\n var totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');\n var totalPacketsSent = getTotalValue('totalPacketsSent');\n var meanRemoteJitter = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);\n var meanRoundTripTime = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);\n var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));\n if (mediaTypeKey) {\n var _statsResults$mediaTy4;\n audioSender.common.common.direction = ((_statsResults$mediaTy4 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy4 === void 0 ? void 0 : _statsResults$mediaTy4.direction) || 'inactive';\n } else {\n audioSender.common.common.direction = 'inactive';\n }\n audioSender.common.common.isMain = !baseMediaType.includes('-share');\n audioSender.common.common.multistreamEnabled = isMultistream;\n audioSender.common.transportType = statsResults.connectionType.local.transport;\n audioSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000;\n audioSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000;\n audioSender.common.rtpPackets = totalPacketsSent - lastPacketsSent || 0;\n audioSender.common.availableBitrate = statsResults.availableOutgoingBitrate;\n var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;\n audioSender.common.maxRemoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0;\n audioSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000;\n audioSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000;\n audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;\n var totalBytesSentInaMin = getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'totalBytesSent') - getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, 'totalBytesSent');\n audioSender.common.rtpBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;\n};\nvar getAudioSenderStreamMqa = _ref4 => {\n var _lastMqaDataSent$medi9, _lastMqaDataSent$medi10, _lastMqaDataSent$medi11, _lastMqaDataSent$medi12, _statsResults$mediaTy5, _statsResults$mediaTy6;\n var {\n audioSenderStream,\n statsResults,\n lastMqaDataSent,\n mediaType\n } = _ref4;\n var sendrecvType = MediaDirection.SEND;\n var lastBytesSent = ((_lastMqaDataSent$medi9 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi9 === void 0 ? void 0 : _lastMqaDataSent$medi9[sendrecvType].totalBytesSent) || 0;\n var lastFramesEncoded = ((_lastMqaDataSent$medi10 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi10 === void 0 ? void 0 : _lastMqaDataSent$medi10[sendrecvType].totalKeyFramesEncoded) || 0;\n var lastFirCount = ((_lastMqaDataSent$medi11 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi11 === void 0 ? void 0 : _lastMqaDataSent$medi11[sendrecvType].totalFirCount) || 0;\n var lastPacketsSent = ((_lastMqaDataSent$medi12 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi12 === void 0 ? void 0 : _lastMqaDataSent$medi12[sendrecvType].totalPacketsSent) || 0;\n var {\n csi\n } = statsResults[mediaType];\n if (csi && !audioSenderStream.common.csi.includes(csi)) {\n audioSenderStream.common.csi.push(csi);\n }\n audioSenderStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n var totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;\n audioSenderStream.common.transmittedBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;\n audioSenderStream.transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;\n audioSenderStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;\n audioSenderStream.common.requestedBitrate = (_statsResults$mediaTy5 = statsResults[mediaType][sendrecvType].requestedBitrate) !== null && _statsResults$mediaTy5 !== void 0 ? _statsResults$mediaTy5 : -1;\n var lastUsedEffect = (_statsResults$mediaTy6 = statsResults[mediaType][sendrecvType]) === null || _statsResults$mediaTy6 === void 0 ? void 0 : _statsResults$mediaTy6.effect;\n var mode = NOISE_REDUCTION_MODE.NONE;\n if ((lastUsedEffect === null || lastUsedEffect === void 0 ? void 0 : lastUsedEffect.noiseReductionMode) in NOISE_REDUCTION_MODE) {\n mode = NOISE_REDUCTION_MODE[lastUsedEffect.noiseReductionMode];\n }\n audioSenderStream.backgroundNoiseReductionMode = mode;\n};\nvar getVideoReceiverMqa = _ref5 => {\n var {\n videoReceiver,\n statsResults,\n lastMqaDataSent,\n baseMediaType,\n isMultistream\n } = _ref5;\n var sendrecvType = MediaDirection.RECEIVE;\n var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n var lastPacketsReceived = getLastTotalValue('totalPacketsReceived');\n var lastPacketsLost = getLastTotalValue('totalPacketsLost');\n var lastBytesReceived = getLastTotalValue('totalBytesReceived');\n var lastRtxPacketsReceived = getLastTotalValue('totalRtxPacketsReceived');\n var lastRtxBytesReceived = getLastTotalValue('totalRtxBytesReceived');\n var packetsLost = getTotalValue('totalPacketsLost');\n var totalPacketsReceived = getTotalValue('totalPacketsReceived');\n var totalBytesReceived = getTotalValue('totalBytesReceived');\n var totalRtxPacketsReceived = getTotalValue('totalRtxPacketsReceived');\n var totalRtxBytesReceived = getTotalValue('totalRtxBytesReceived');\n var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));\n if (mediaTypeKey) {\n var _statsResults$mediaTy7;\n videoReceiver.common.common.direction = ((_statsResults$mediaTy7 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy7 === void 0 ? void 0 : _statsResults$mediaTy7.direction) || 'inactive';\n } else {\n videoReceiver.common.common.direction = 'inactive';\n }\n videoReceiver.common.common.isMain = !baseMediaType.includes('-share');\n videoReceiver.common.common.multistreamEnabled = isMultistream;\n videoReceiver.common.transportType = statsResults.connectionType.local.transport;\n videoReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived || 0;\n var totalPacketsLost = packetsLost - lastPacketsLost;\n videoReceiver.common.mediaHopByHopLost = totalPacketsLost;\n videoReceiver.common.rtpHopByHopLost = totalPacketsLost;\n var totalBytesReceivedInaMin = totalBytesReceived - lastBytesReceived;\n var totalRtxBytesReceivedInaMin = totalRtxBytesReceived - lastRtxBytesReceived;\n videoReceiver.common.rtpBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;\n videoReceiver.common.rtxPackets = totalRtxPacketsReceived - lastRtxPacketsReceived;\n videoReceiver.common.rtxBitrate = totalRtxBytesReceivedInaMin ? totalRtxBytesReceivedInaMin * 8 / 60 : 0;\n};\nvar getVideoReceiverStreamMqa = _ref6 => {\n var _lastMqaDataSent$medi13, _lastMqaDataSent$medi14, _lastMqaDataSent$medi15, _lastMqaDataSent$medi16, _lastMqaDataSent$medi17, _lastMqaDataSent$medi18, _lastMqaDataSent$medi19, _lastMqaDataSent$medi20, _statsResults$mediaTy8, _statsResults$mediaTy9, _statsResults$mediaTy10, _statsResults$mediaTy11, _statsResults$mediaTy12;\n var {\n videoReceiverStream,\n statsResults,\n lastMqaDataSent,\n mediaType\n } = _ref6;\n var sendrecvType = MediaDirection.RECEIVE;\n var lastPacketsReceived = ((_lastMqaDataSent$medi13 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi13 === void 0 ? void 0 : _lastMqaDataSent$medi13[sendrecvType].totalPacketsReceived) || 0;\n var lastPacketsLost = ((_lastMqaDataSent$medi14 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi14 === void 0 ? void 0 : _lastMqaDataSent$medi14[sendrecvType].totalPacketsLost) || 0;\n var lastBytesReceived = ((_lastMqaDataSent$medi15 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi15 === void 0 ? void 0 : _lastMqaDataSent$medi15[sendrecvType].totalBytesReceived) || 0;\n var lastFramesReceived = ((_lastMqaDataSent$medi16 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi16 === void 0 ? void 0 : _lastMqaDataSent$medi16[sendrecvType].framesReceived) || 0;\n var lastFramesDecoded = ((_lastMqaDataSent$medi17 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi17 === void 0 ? void 0 : _lastMqaDataSent$medi17[sendrecvType].framesDecoded) || 0;\n var lastFramesDropped = ((_lastMqaDataSent$medi18 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi18 === void 0 ? void 0 : _lastMqaDataSent$medi18[sendrecvType].framesDropped) || 0;\n var lastKeyFramesDecoded = ((_lastMqaDataSent$medi19 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi19 === void 0 ? void 0 : _lastMqaDataSent$medi19[sendrecvType].keyFramesDecoded) || 0;\n var lastPliCount = ((_lastMqaDataSent$medi20 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi20 === void 0 ? void 0 : _lastMqaDataSent$medi20[sendrecvType].totalPliCount) || 0;\n var {\n csi\n } = statsResults[mediaType];\n if (csi && !videoReceiverStream.common.csi.includes(csi)) {\n videoReceiverStream.common.csi.push(csi);\n }\n videoReceiverStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\n var totalPacketLoss = statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n videoReceiverStream.common.rtpEndToEndLost = totalPacketLoss;\n videoReceiverStream.common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;\n videoReceiverStream.common.meanRtpJitter = mean(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;\n var totalBytesReceivedInaMin = statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;\n videoReceiverStream.common.receivedBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;\n var totalFrameReceivedInaMin = statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;\n var totalFrameDecodedInaMin = statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;\n videoReceiverStream.common.receivedFrameRate = Math.round(totalFrameReceivedInaMin ? totalFrameReceivedInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);\n videoReceiverStream.common.renderedFrameRate = Math.round(totalFrameDecodedInaMin ? totalFrameDecodedInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);\n videoReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped || 0;\n videoReceiverStream.receivedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoReceiverStream.receivedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoReceiverStream.receivedFrameSize = videoReceiverStream.receivedHeight * videoReceiverStream.receivedWidth / 256;\n videoReceiverStream.receivedKeyFrames = statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;\n videoReceiverStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;\n videoReceiverStream.isActiveSpeaker = statsResults[mediaType][sendrecvType].isActiveSpeaker || ((_statsResults$mediaTy8 = statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp) !== null && _statsResults$mediaTy8 !== void 0 ? _statsResults$mediaTy8 : 0) > 0 && performance.now() + performance.timeOrigin - ((_statsResults$mediaTy9 = statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp) !== null && _statsResults$mediaTy9 !== void 0 ? _statsResults$mediaTy9 : 0) < MQA_INTERVAL;\n videoReceiverStream.common.requestedBitrate = (_statsResults$mediaTy10 = statsResults[mediaType][sendrecvType].requestedBitrate) !== null && _statsResults$mediaTy10 !== void 0 ? _statsResults$mediaTy10 : -1;\n videoReceiverStream.requestedFrameSize = (_statsResults$mediaTy11 = statsResults[mediaType][sendrecvType].requestedFrameSize) !== null && _statsResults$mediaTy11 !== void 0 ? _statsResults$mediaTy11 : -1;\n videoReceiverStream.common.requestedFrameRate = (_statsResults$mediaTy12 = statsResults[mediaType][sendrecvType].requestedFrameRate) !== null && _statsResults$mediaTy12 !== void 0 ? _statsResults$mediaTy12 : -1;\n};\nvar getVideoSenderMqa = _ref7 => {\n var {\n videoSender,\n statsResults,\n lastMqaDataSent,\n baseMediaType,\n isMultistream\n } = _ref7;\n var sendrecvType = MediaDirection.SEND;\n var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n var lastPacketsSent = getLastTotalValue('totalPacketsSent');\n var lastBytesSent = getLastTotalValue('totalBytesSent');\n var lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');\n var lastRtxPacketsSent = getLastTotalValue('totalRtxPacketsSent');\n var lastRtxBytesSent = getLastTotalValue('totalRtxBytesSent');\n var totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');\n var totalPacketsSent = getTotalValue('totalPacketsSent');\n var totalBytesSent = getTotalValue('totalBytesSent');\n var totalRtxPacketsSent = getTotalValue('totalRtxPacketsSent');\n var totalRtxBytesSent = getTotalValue('totalRtxBytesSent');\n var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));\n if (mediaTypeKey) {\n var _statsResults$mediaTy13;\n videoSender.common.common.direction = ((_statsResults$mediaTy13 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy13 === void 0 ? void 0 : _statsResults$mediaTy13.direction) || 'inactive';\n } else {\n videoSender.common.common.direction = 'inactive';\n }\n videoSender.common.common.isMain = !baseMediaType.includes('-share');\n videoSender.common.common.multistreamEnabled = isMultistream;\n videoSender.common.transportType = statsResults.connectionType.local.transport;\n var meanRemoteJitter = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);\n var meanRoundTripTime = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);\n videoSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000;\n videoSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000;\n videoSender.common.rtpPackets = totalPacketsSent - lastPacketsSent;\n videoSender.common.availableBitrate = statsResults.availableOutgoingBitrate;\n var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;\n videoSender.common.maxRemoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0;\n videoSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000;\n videoSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000;\n videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;\n var totalBytesSentInaMin = totalBytesSent - lastBytesSent;\n var totalRtxBytesSentInaMin = totalRtxBytesSent - lastRtxBytesSent;\n videoSender.common.rtpBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;\n videoSender.common.rtxPackets = totalRtxPacketsSent - lastRtxPacketsSent;\n videoSender.common.rtxBitrate = totalRtxBytesSentInaMin ? totalRtxBytesSentInaMin * 8 / 60 : 0;\n};\nvar getVideoSenderStreamMqa = _ref8 => {\n var _lastMqaDataSent$medi21, _lastMqaDataSent$medi22, _lastMqaDataSent$medi23, _lastMqaDataSent$medi24, _lastMqaDataSent$medi25, _statsResults$mediaTy14, _statsResults$mediaTy15, _statsResults$mediaTy16;\n var {\n videoSenderStream,\n statsResults,\n lastMqaDataSent,\n mediaType\n } = _ref8;\n var sendrecvType = MediaDirection.SEND;\n var lastPacketsSent = ((_lastMqaDataSent$medi21 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi21 === void 0 ? void 0 : _lastMqaDataSent$medi21[sendrecvType].totalPacketsSent) || 0;\n var lastBytesSent = ((_lastMqaDataSent$medi22 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi22 === void 0 ? void 0 : _lastMqaDataSent$medi22[sendrecvType].totalBytesSent) || 0;\n var lastKeyFramesEncoded = ((_lastMqaDataSent$medi23 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi23 === void 0 ? void 0 : _lastMqaDataSent$medi23[sendrecvType].totalKeyFramesEncoded) || 0;\n var lastFirCount = ((_lastMqaDataSent$medi24 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi24 === void 0 ? void 0 : _lastMqaDataSent$medi24[sendrecvType].totalFirCount) || 0;\n var lastFramesSent = ((_lastMqaDataSent$medi25 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi25 === void 0 ? void 0 : _lastMqaDataSent$medi25[sendrecvType].framesSent) || 0;\n var {\n csi\n } = statsResults[mediaType];\n if (csi && !videoSenderStream.common.csi.includes(csi)) {\n videoSenderStream.common.csi.push(csi);\n }\n videoSenderStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n var totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;\n videoSenderStream.common.transmittedBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;\n videoSenderStream.transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;\n videoSenderStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;\n var totalFrameSentInaMin = statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);\n videoSenderStream.common.transmittedFrameRate = Math.round(totalFrameSentInaMin ? totalFrameSentInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);\n videoSenderStream.transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoSenderStream.transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoSenderStream.transmittedFrameSize = videoSenderStream.transmittedHeight * videoSenderStream.transmittedWidth / 256;\n videoSenderStream.common.requestedBitrate = (_statsResults$mediaTy14 = statsResults[mediaType][sendrecvType].requestedBitrate) !== null && _statsResults$mediaTy14 !== void 0 ? _statsResults$mediaTy14 : -1;\n videoSenderStream.requestedFrameSize = (_statsResults$mediaTy15 = statsResults[mediaType][sendrecvType].requestedFrameSize) !== null && _statsResults$mediaTy15 !== void 0 ? _statsResults$mediaTy15 : -1;\n var lastUsedEffect = (_statsResults$mediaTy16 = statsResults[mediaType][sendrecvType]) === null || _statsResults$mediaTy16 === void 0 ? void 0 : _statsResults$mediaTy16.effect;\n var mode = VIRTUAL_BACKGROUND_MODE.NONE;\n if ((lastUsedEffect === null || lastUsedEffect === void 0 ? void 0 : lastUsedEffect.virtualBackgroundMode) in VIRTUAL_BACKGROUND_MODE) {\n mode = VIRTUAL_BACKGROUND_MODE[lastUsedEffect.virtualBackgroundMode];\n }\n videoSenderStream.backgroundAugmentationType = mode;\n};\nvar isStreamRequested = _ref9 => {\n var _statsResults$mediaTy17, _statsResults$mediaTy18;\n var {\n isMultistream,\n statsResults,\n mediaType,\n direction\n } = _ref9;\n if (!isMultistream) {\n return true;\n }\n var now = performance.timeOrigin + performance.now();\n var lastUpdateTimestamp = (_statsResults$mediaTy17 = statsResults[mediaType][direction]) === null || _statsResults$mediaTy17 === void 0 ? void 0 : _statsResults$mediaTy17.lastRequestedUpdateTimestamp;\n var isRequested = (_statsResults$mediaTy18 = statsResults[mediaType][direction]) === null || _statsResults$mediaTy18 === void 0 ? void 0 : _statsResults$mediaTy18.isRequested;\n return isRequested || lastUpdateTimestamp && now - lastUpdateTimestamp < MQA_INTERVAL;\n};\n\nvar StatsAnalyzerEventNames;\n(function (StatsAnalyzerEventNames) {\n StatsAnalyzerEventNames[\"MEDIA_QUALITY\"] = \"MEDIA_QUALITY\";\n StatsAnalyzerEventNames[\"LOCAL_MEDIA_STARTED\"] = \"LOCAL_MEDIA_STARTED\";\n StatsAnalyzerEventNames[\"LOCAL_MEDIA_STOPPED\"] = \"LOCAL_MEDIA_STOPPED\";\n StatsAnalyzerEventNames[\"REMOTE_MEDIA_STARTED\"] = \"REMOTE_MEDIA_STARTED\";\n StatsAnalyzerEventNames[\"REMOTE_MEDIA_STOPPED\"] = \"REMOTE_MEDIA_STOPPED\";\n})(StatsAnalyzerEventNames || (StatsAnalyzerEventNames = {}));\nvar NetworkQualityEventNames;\n(function (NetworkQualityEventNames) {\n NetworkQualityEventNames[\"NETWORK_QUALITY\"] = \"NETWORK_QUALITY\";\n})(NetworkQualityEventNames || (NetworkQualityEventNames = {}));\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nclass StatsAnalyzer extends EventEmitter$5 {\n constructor(_ref) {\n var {\n config,\n networkQualityMonitor,\n statsResults = STATS_DEFAULT,\n isMultistream = false\n } = _ref;\n super();\n _defineProperty(this, \"config\", void 0);\n _defineProperty(this, \"correlationId\", void 0);\n _defineProperty(this, \"lastEmittedStartStopEvents\", void 0);\n _defineProperty(this, \"lastMqaDataSent\", void 0);\n _defineProperty(this, \"lastStatsResults\", void 0);\n _defineProperty(this, \"meetingMediaStatus\", void 0);\n _defineProperty(this, \"mqaInterval\", void 0);\n _defineProperty(this, \"mqaSentCount\", void 0);\n _defineProperty(this, \"networkQualityMonitor\", void 0);\n _defineProperty(this, \"mediaConnection\", void 0);\n _defineProperty(this, \"statsInterval\", void 0);\n _defineProperty(this, \"statsResults\", void 0);\n _defineProperty(this, \"statsStarted\", void 0);\n _defineProperty(this, \"successfulCandidatePair\", void 0);\n _defineProperty(this, \"localIpAddress\", void 0);\n _defineProperty(this, \"shareVideoEncoderImplementation\", void 0);\n _defineProperty(this, \"isMultistream\", void 0);\n _defineProperty(this, \"emitStartStopEvents\", (mediaType, previousValue, currentValue, isLocal) => {\n var _this$lastEmittedStar, _this$lastEmittedStar2;\n if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {\n throw new Error(\"Unsupported mediaType: \".concat(mediaType));\n }\n if (previousValue === undefined) previousValue = 0;\n if (currentValue === undefined) currentValue = 0;\n if (!this.lastEmittedStartStopEvents[mediaType]) {\n this.lastEmittedStartStopEvents[mediaType] = {};\n }\n var lastEmittedEvent = isLocal ? (_this$lastEmittedStar = this.lastEmittedStartStopEvents[mediaType]) === null || _this$lastEmittedStar === void 0 ? void 0 : _this$lastEmittedStar.local : (_this$lastEmittedStar2 = this.lastEmittedStartStopEvents[mediaType]) === null || _this$lastEmittedStar2 === void 0 ? void 0 : _this$lastEmittedStar2.remote;\n var newEvent;\n if (currentValue - previousValue > 0) {\n newEvent = isLocal ? StatsAnalyzerEventNames.LOCAL_MEDIA_STARTED : StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED;\n } else if (currentValue === previousValue && currentValue > 0) {\n newEvent = isLocal ? StatsAnalyzerEventNames.LOCAL_MEDIA_STOPPED : StatsAnalyzerEventNames.REMOTE_MEDIA_STOPPED;\n }\n if (newEvent && lastEmittedEvent !== newEvent) {\n var emittedEvent = this.lastEmittedStartStopEvents[mediaType];\n if (isLocal) {\n emittedEvent.local = newEvent;\n } else {\n emittedEvent.remote = newEvent;\n }\n this.emit(newEvent, {\n mediaType\n });\n }\n });\n _defineProperty(this, \"extractAndSetLocalIpAddressInfoForDiagnostics\", (successfulCandidatePairId, candidates) => {\n var newIpAddress = '';\n if (successfulCandidatePairId && Object.keys(candidates).length > 0) {\n var localCandidate = candidates[successfulCandidatePairId];\n if (localCandidate) {\n if (localCandidate.candidateType === 'host') {\n newIpAddress = \"\".concat(localCandidate.address);\n } else if (localCandidate.candidateType === 'prflx') {\n if (!localCandidate.relayProtocol) {\n newIpAddress = \"\".concat(localCandidate.relatedAddress);\n } else {\n newIpAddress = \"\".concat(localCandidate.address);\n }\n }\n }\n }\n this.localIpAddress = newIpAddress;\n });\n _defineProperty(this, \"parseCandidate\", (result, type, isSender, isRemote) => {\n var _this$successfulCandi;\n if (!result || !result.id) {\n return;\n }\n if (((_this$successfulCandi = this.successfulCandidatePair) === null || _this$successfulCandi === void 0 ? void 0 : _this$successfulCandi.localCandidateId) !== result.id) {\n return;\n }\n var transport;\n if (result.relayProtocol) {\n transport = result.relayProtocol.toUpperCase();\n } else if (result.protocol) {\n transport = result.protocol.toUpperCase();\n }\n var sendRecvType = isSender ? MediaDirection.SEND : MediaDirection.RECEIVE;\n var ipType = isRemote ? IpType.REMOTE : IpType.LOCAL;\n if (!this.statsResults.candidates) {\n this.statsResults.candidates = {};\n }\n this.statsResults.candidates[result.id] = {\n candidateType: result.candidateType,\n ipAddress: result.ip,\n relatedAddress: result.relatedAddress,\n relatedPort: result.relatedPort,\n relayProtocol: result.relayProtocol,\n protocol: result.protocol,\n address: result.address,\n portNumber: result.port,\n networkType: result.networkType,\n priority: result.priority,\n transport,\n timestamp: result.time,\n id: result.id,\n type: result.type\n };\n this.statsResults.connectionType[ipType].candidateType = result.candidateType;\n this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;\n this.statsResults.connectionType[ipType].networkType = result.networkType === NetworkType.VPN ? NetworkType.UNKNOWN : result.networkType;\n this.statsResults.connectionType[ipType].transport = transport;\n this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;\n });\n this.statsStarted = false;\n this.statsResults = statsResults;\n this.lastStatsResults = null;\n this.config = config;\n this.networkQualityMonitor = networkQualityMonitor;\n this.correlationId = config.correlationId;\n this.mqaSentCount = -1;\n this.lastMqaDataSent = {};\n this.mediaConnection = null;\n this.lastEmittedStartStopEvents = {};\n this.successfulCandidatePair = {};\n this.localIpAddress = '';\n this.isMultistream = isMultistream;\n }\n resetStatsResults() {\n Object.keys(this.statsResults).forEach(mediaType => {\n if (mediaType.includes('recv')) {\n this.statsResults[mediaType].recv.meanRtpJitter = [];\n }\n if (mediaType.includes('send')) {\n this.statsResults[mediaType].send.meanRemoteJitter = [];\n this.statsResults[mediaType].send.meanRoundTripTime = [];\n this.statsResults[mediaType].send.effect = undefined;\n }\n });\n }\n updateMediaStatus(status) {\n var _this$meetingMediaSta, _this$meetingMediaSta2;\n this.meetingMediaStatus = {\n actual: _objectSpread(_objectSpread({}, (_this$meetingMediaSta = this.meetingMediaStatus) === null || _this$meetingMediaSta === void 0 ? void 0 : _this$meetingMediaSta.actual), status === null || status === void 0 ? void 0 : status.actual),\n expected: _objectSpread(_objectSpread({}, (_this$meetingMediaSta2 = this.meetingMediaStatus) === null || _this$meetingMediaSta2 === void 0 ? void 0 : _this$meetingMediaSta2.expected), status === null || status === void 0 ? void 0 : status.expected)\n };\n }\n sendMqaData() {\n var newMqa = structuredClone(emptyMqaInterval);\n Object.keys(this.statsResults).forEach(mediaType => {\n if (!this.lastMqaDataSent[mediaType]) {\n this.lastMqaDataSent[mediaType] = {};\n }\n if (!this.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {\n this.lastMqaDataSent[mediaType].send = {};\n }\n if (!this.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {\n this.lastMqaDataSent[mediaType].recv = {};\n }\n });\n var audioSender = structuredClone(emptyAudioTransmit);\n var audioShareSender = structuredClone(emptyAudioTransmit);\n var audioReceiver = structuredClone(emptyAudioReceive);\n var audioShareReceiver = structuredClone(emptyAudioReceive);\n var videoSender = structuredClone(emptyVideoTransmit);\n var videoShareSender = structuredClone(emptyVideoTransmit);\n var videoReceiver = structuredClone(emptyVideoReceive);\n var videoShareReceiver = structuredClone(emptyVideoReceive);\n getAudioSenderMqa({\n audioSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-send',\n isMultistream: this.isMultistream\n });\n newMqa.audioTransmit.push(audioSender);\n getAudioSenderMqa({\n audioSender: audioShareSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-share-send',\n isMultistream: this.isMultistream\n });\n newMqa.audioTransmit.push(audioShareSender);\n getAudioReceiverMqa({\n audioReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-recv',\n isMultistream: this.isMultistream\n });\n newMqa.audioReceive.push(audioReceiver);\n getAudioReceiverMqa({\n audioReceiver: audioShareReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'audio-share-recv',\n isMultistream: this.isMultistream\n });\n newMqa.audioReceive.push(audioShareReceiver);\n getVideoSenderMqa({\n videoSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-send',\n isMultistream: this.isMultistream\n });\n newMqa.videoTransmit.push(videoSender);\n getVideoSenderMqa({\n videoSender: videoShareSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-share-send',\n isMultistream: this.isMultistream\n });\n newMqa.videoTransmit.push(videoShareSender);\n getVideoReceiverMqa({\n videoReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-recv',\n isMultistream: this.isMultistream\n });\n newMqa.videoReceive.push(videoReceiver);\n getVideoReceiverMqa({\n videoReceiver: videoShareReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n baseMediaType: 'video-share-recv',\n isMultistream: this.isMultistream\n });\n newMqa.videoReceive.push(videoShareReceiver);\n Object.keys(this.statsResults).forEach(mediaType => {\n if (mediaType.startsWith('audio-send')) {\n var audioSenderStream = structuredClone(emptyAudioTransmitStream);\n getAudioSenderStreamMqa({\n audioSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested({\n isMultistream: this.isMultistream,\n statsResults: this.statsResults,\n mediaType,\n direction: MediaDirection.SEND\n })) {\n newMqa.audioTransmit[0].streams.push(audioSenderStream);\n }\n this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('audio-share-send')) {\n var _audioSenderStream = structuredClone(emptyAudioTransmitStream);\n getAudioSenderStreamMqa({\n audioSenderStream: _audioSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested({\n isMultistream: this.isMultistream,\n statsResults: this.statsResults,\n mediaType,\n direction: MediaDirection.SEND\n })) {\n newMqa.audioTransmit[1].streams.push(_audioSenderStream);\n }\n this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('audio-recv')) {\n var audioReceiverStream = structuredClone(emptyAudioReceiveStream);\n getAudioReceiverStreamMqa({\n audioReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested({\n isMultistream: this.isMultistream,\n statsResults: this.statsResults,\n mediaType,\n direction: MediaDirection.RECEIVE\n })) {\n newMqa.audioReceive[0].streams.push(audioReceiverStream);\n }\n this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);\n } else if (mediaType.startsWith('audio-share-recv')) {\n var _audioReceiverStream = structuredClone(emptyAudioReceiveStream);\n getAudioReceiverStreamMqa({\n audioReceiverStream: _audioReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested({\n isMultistream: this.isMultistream,\n statsResults: this.statsResults,\n mediaType,\n direction: MediaDirection.RECEIVE\n })) {\n newMqa.audioReceive[1].streams.push(_audioReceiverStream);\n }\n this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);\n } else if (mediaType.startsWith('video-send-layer')) {\n var videoSenderStream = structuredClone(emptyVideoTransmitStream);\n getVideoSenderStreamMqa({\n videoSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested({\n isMultistream: this.isMultistream,\n statsResults: this.statsResults,\n mediaType,\n direction: MediaDirection.SEND\n })) {\n newMqa.videoTransmit[0].streams.push(videoSenderStream);\n }\n this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('video-share-send')) {\n var _videoSenderStream = structuredClone(emptyVideoTransmitStream);\n getVideoSenderStreamMqa({\n videoSenderStream: _videoSenderStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested({\n isMultistream: this.isMultistream,\n statsResults: this.statsResults,\n mediaType,\n direction: MediaDirection.SEND\n })) {\n newMqa.videoTransmit[1].streams.push(_videoSenderStream);\n }\n this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);\n } else if (mediaType.startsWith('video-recv')) {\n var videoReceiverStream = structuredClone(emptyVideoReceiveStream);\n getVideoReceiverStreamMqa({\n videoReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested({\n isMultistream: this.isMultistream,\n statsResults: this.statsResults,\n mediaType,\n direction: MediaDirection.RECEIVE\n })) {\n newMqa.videoReceive[0].streams.push(videoReceiverStream);\n }\n this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);\n } else if (mediaType.startsWith('video-share-recv')) {\n var _videoReceiverStream = structuredClone(emptyVideoReceiveStream);\n getVideoReceiverStreamMqa({\n videoReceiverStream: _videoReceiverStream,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType\n });\n if (isStreamRequested({\n isMultistream: this.isMultistream,\n statsResults: this.statsResults,\n mediaType,\n direction: MediaDirection.RECEIVE\n })) {\n newMqa.videoReceive[1].streams.push(_videoReceiverStream);\n }\n this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);\n }\n });\n newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;\n newMqa.intervalMetadata.cpuInfo.numberOfCores = CpuInfo.getNumLogicalCores() || 1;\n newMqa.intervalMetadata.peripherals.push({\n information: _UNKNOWN_,\n name: MediaDevices.SPEAKER\n });\n if (this.statsResults['audio-send']) {\n newMqa.intervalMetadata.peripherals.push({\n information: this.statsResults['audio-send'].trackLabel || _UNKNOWN_,\n name: MediaDevices.MICROPHONE\n });\n }\n var existingVideoSender = Object.keys(this.statsResults).find(item => item.includes('video-send'));\n if (existingVideoSender) {\n newMqa.intervalMetadata.peripherals.push({\n information: this.statsResults[existingVideoSender].trackLabel || _UNKNOWN_,\n name: MediaDevices.CAMERA\n });\n }\n newMqa.networkType = this.statsResults.connectionType.local.networkType;\n newMqa.intervalMetadata.screenWidth = window.screen.width;\n newMqa.intervalMetadata.screenHeight = window.screen.height;\n newMqa.intervalMetadata.screenResolution = Math.round(window.screen.width * window.screen.height / 256);\n newMqa.intervalMetadata.appWindowWidth = window.innerWidth;\n newMqa.intervalMetadata.appWindowHeight = window.innerHeight;\n newMqa.intervalMetadata.appWindowSize = Math.round(window.innerWidth * window.innerHeight / 256);\n this.mqaSentCount += 1;\n newMqa.intervalNumber = this.mqaSentCount;\n this.resetStatsResults();\n this.emit(StatsAnalyzerEventNames.MEDIA_QUALITY, {\n data: newMqa\n });\n }\n getLocalIpAddress() {\n return this.localIpAddress;\n }\n startAnalyzer(mediaConnection) {\n if (!this.statsStarted) {\n this.statsStarted = true;\n this.mediaConnection = mediaConnection;\n return this.getStatsAndParse().then(() => {\n this.statsInterval = setInterval(() => {\n this.getStatsAndParse();\n }, this.config.analyzerInterval);\n this.sendMqaData();\n this.mqaInterval = setInterval(() => {\n this.sendMqaData();\n }, MQA_INTERVAL);\n });\n }\n return Promise.resolve();\n }\n stopAnalyzer() {\n var sendOneLastMqa = this.mqaInterval && this.statsInterval;\n if (this.statsInterval) {\n clearInterval(this.statsInterval);\n this.statsInterval = undefined;\n }\n if (this.mqaInterval) {\n clearInterval(this.mqaInterval);\n this.mqaInterval = undefined;\n }\n this.statsStarted = false;\n if (sendOneLastMqa) {\n return this.getStatsAndParse().then(() => {\n this.sendMqaData();\n this.mediaConnection = null;\n });\n }\n return Promise.resolve();\n }\n parseGetStatsResult(getStatsResult, type, isSender) {\n if (!getStatsResult) {\n return;\n }\n if (!this.statsResults[type]) {\n this.statsResults[type] = {};\n }\n if (isSender && !this.statsResults[type].send) {\n this.statsResults[type].send = structuredClone(emptySender);\n } else if (!isSender && !this.statsResults[type].recv) {\n this.statsResults[type].recv = structuredClone(emptyReceiver);\n }\n switch (getStatsResult.type) {\n case 'outbound-rtp':\n this.processOutboundRTPResult(getStatsResult, type);\n break;\n case 'inbound-rtp':\n this.processInboundRTPResult(getStatsResult, type);\n break;\n case 'remote-inbound-rtp':\n case 'remote-outbound-rtp':\n this.compareSentAndReceived(getStatsResult, type);\n break;\n case 'remotecandidate':\n case 'remote-candidate':\n this.parseCandidate(getStatsResult, type, isSender, true);\n break;\n case 'local-candidate':\n this.parseCandidate(getStatsResult, type, isSender, false);\n break;\n case 'media-source':\n this.parseAudioSource(getStatsResult, type);\n break;\n }\n }\n filterAndParseGetStatsResults(statsItem, type, isSender) {\n var _this$successfulCandi2;\n var {\n types\n } = DEFAULT_GET_STATS_FILTER;\n statsItem.report.forEach(report => {\n if (report.type === 'candidate-pair' && report.state === 'succeeded') {\n this.successfulCandidatePair = report;\n }\n });\n this.statsResults.availableOutgoingBitrate = ((_this$successfulCandi2 = this.successfulCandidatePair) === null || _this$successfulCandi2 === void 0 ? void 0 : _this$successfulCandi2.availableOutgoingBitrate) || 0;\n var videoSenderIndex = 0;\n statsItem.report.forEach(result => {\n if (types.includes(result.type)) {\n if (type === 'video-send' && result.type === 'outbound-rtp') {\n var newType = \"video-send-layer-\".concat(videoSenderIndex);\n this.parseGetStatsResult(result, newType, isSender);\n videoSenderIndex += 1;\n this.statsResults[newType].direction = statsItem.currentDirection;\n this.statsResults[newType].trackLabel = statsItem.localTrackLabel;\n this.statsResults[newType].csi = statsItem.csi;\n } else if (type === 'video-share-send' && result.type === 'outbound-rtp') {\n this.shareVideoEncoderImplementation = result.encoderImplementation;\n this.parseGetStatsResult(result, type, isSender);\n } else {\n this.parseGetStatsResult(result, type, isSender);\n }\n }\n });\n if (this.statsResults[type]) {\n var _this$successfulCandi3, _this$statsResults;\n this.statsResults[type].direction = statsItem.currentDirection;\n this.statsResults[type].trackLabel = statsItem.localTrackLabel;\n this.statsResults[type].csi = statsItem.csi;\n this.extractAndSetLocalIpAddressInfoForDiagnostics((_this$successfulCandi3 = this.successfulCandidatePair) === null || _this$successfulCandi3 === void 0 ? void 0 : _this$successfulCandi3.localCandidateId, (_this$statsResults = this.statsResults) === null || _this$statsResults === void 0 ? void 0 : _this$statsResults.candidates);\n this.successfulCandidatePair = {};\n }\n }\n parseAudioSource(result, type) {\n if (!result) {\n return;\n }\n if (type.includes('audio-send')) {\n this.statsResults[type].send.audioLevel = result.audioLevel;\n this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;\n }\n }\n compareLastStatsResult() {\n if (this.lastStatsResults !== null && this.meetingMediaStatus) {\n var getCurrentStatsTotals = (keyPrefix, value) => Object.keys(this.statsResults).filter(key => key.startsWith(keyPrefix)).reduce((prev, cur) => {\n var _this$statsResults$cu;\n return prev + (((_this$statsResults$cu = this.statsResults[cur]) === null || _this$statsResults$cu === void 0 ? void 0 : _this$statsResults$cu[keyPrefix.includes('send') ? 'send' : 'recv'][value]) || 0);\n }, 0);\n var getPreviousStatsTotals = (keyPrefix, value) => Object.keys(this.statsResults).filter(key => key.startsWith(keyPrefix)).reduce((prev, cur) => {\n var _this$lastStatsResult, _this$lastStatsResult2;\n return prev + (((_this$lastStatsResult = this.lastStatsResults) === null || _this$lastStatsResult === void 0 ? void 0 : (_this$lastStatsResult2 = _this$lastStatsResult[cur]) === null || _this$lastStatsResult2 === void 0 ? void 0 : _this$lastStatsResult2[keyPrefix.includes('send') ? 'send' : 'recv'][value]) || 0);\n }, 0);\n if (this.lastStatsResults['audio-send']) {\n var currentStats = this.statsResults['audio-send'].send;\n var previousStats = this.lastStatsResults['audio-send'].send;\n if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent\", currentStats.totalPacketsSent);\n } else {\n if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present\", currentStats.totalAudioEnergy);\n }\n if (this.meetingMediaStatus.expected.sendAudio && currentStats.audioLevel === 0) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user\");\n }\n }\n this.emitStartStopEvents('audio', previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);\n }\n var currentAudioPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');\n var previousAudioPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');\n this.emitStartStopEvents('audio', previousAudioPacketsReceived, currentAudioPacketsReceived, false);\n var currentTotalPacketsSent = getCurrentStatsTotals('video-send', 'totalPacketsSent');\n var previousTotalPacketsSent = getPreviousStatsTotals('video-send', 'totalPacketsSent');\n var currentFramesEncoded = getCurrentStatsTotals('video-send', 'framesEncoded');\n var previousFramesEncoded = getPreviousStatsTotals('video-send', 'framesEncoded');\n var currentFramesSent = getCurrentStatsTotals('video-send', 'framesSent');\n var previousFramesSent = getPreviousStatsTotals('video-send', 'framesSent');\n var doesVideoSendExist = Object.keys(this.lastStatsResults).some(item => item.includes('video-send'));\n if (doesVideoSendExist) {\n if (this.meetingMediaStatus.expected.sendVideo && (currentTotalPacketsSent === previousTotalPacketsSent || currentTotalPacketsSent === 0)) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent\", currentTotalPacketsSent);\n } else {\n if (this.meetingMediaStatus.expected.sendVideo && (currentFramesEncoded === previousFramesEncoded || currentFramesEncoded === 0)) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded\", currentFramesEncoded);\n }\n if (this.meetingMediaStatus.expected.sendVideo && (currentFramesSent === previousFramesSent || currentFramesSent === 0)) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent\", currentFramesSent);\n }\n }\n this.emitStartStopEvents('video', previousFramesSent, currentFramesSent, true);\n }\n var currentVideoFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');\n var previousVideoFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');\n this.emitStartStopEvents('video', previousVideoFramesDecoded, currentVideoFramesDecoded, false);\n if (this.lastStatsResults['video-share-send']) {\n var _currentStats = this.statsResults['video-share-send'].send;\n var _previousStats = this.lastStatsResults['video-share-send'].send;\n if (this.meetingMediaStatus.expected.sendShare && (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0)) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent\", _currentStats.totalPacketsSent);\n } else {\n if (this.meetingMediaStatus.expected.sendShare && (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0)) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded\", _currentStats.framesEncoded);\n }\n if (this.meetingMediaStatus.expected.sendShare && (this.statsResults['video-share-send'].send.framesSent === this.lastStatsResults['video-share-send'].send.framesSent || this.statsResults['video-share-send'].send.framesSent === 0)) {\n getLogger().info(\"StatsAnalyzer:index#compareLastStatsResult --> No share frames sent\", this.statsResults['video-share-send'].send.framesSent);\n }\n }\n this.emitStartStopEvents('share', _previousStats.framesSent, _currentStats.framesSent, true);\n }\n var currentShareFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');\n var previousShareFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');\n this.emitStartStopEvents('share', previousShareFramesDecoded, currentShareFramesDecoded, false);\n }\n }\n getStatsAndParse() {\n if (!this.mediaConnection) {\n return Promise.resolve();\n }\n if (this.mediaConnection && this.mediaConnection.getConnectionState() === ConnectionState.Failed) {\n getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state');\n return Promise.resolve();\n }\n getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');\n return this.mediaConnection.getTransceiverStats().then(transceiverStats => {\n transceiverStats.video.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, \"video-recv-\".concat(i), false));\n transceiverStats.audio.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, \"audio-recv-\".concat(i), false));\n transceiverStats.screenShareVideo.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, \"video-share-recv-\".concat(i), false));\n transceiverStats.screenShareAudio.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, \"audio-share-recv-\".concat(i), false));\n transceiverStats.video.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'video-send', true);\n });\n transceiverStats.audio.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'audio-send', true);\n });\n transceiverStats.screenShareVideo.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'video-share-send', true);\n });\n transceiverStats.screenShareAudio.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'audio-share-send', true);\n });\n this.compareLastStatsResult();\n this.lastStatsResults = JSON.parse(JSON.stringify(this.statsResults));\n getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');\n });\n }\n processOutboundRTPResult(result, mediaType) {\n var sendrecvType = MediaDirection.SEND;\n if (result.bytesSent) {\n var kilobytes = 0;\n if (result.frameWidth && result.frameHeight) {\n this.statsResults[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;\n }\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;\n this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;\n this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].totalPacketsSent = result.packetsSent;\n this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;\n this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].encoderImplementation = result.encoderImplementation;\n this.statsResults[mediaType][sendrecvType].qualityLimitationReason = result.qualityLimitationReason;\n this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges = result.qualityLimitationResolutionChanges;\n this.statsResults[mediaType][sendrecvType].totalRtxPacketsSent = result.retransmittedPacketsSent;\n this.statsResults[mediaType][sendrecvType].totalRtxBytesSent = result.retransmittedBytesSent;\n this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;\n this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;\n this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;\n this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;\n this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp = result.lastRequestedUpdateTimestamp;\n this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;\n this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;\n if (result.effect) {\n this.statsResults[mediaType][sendrecvType].effect = result.effect;\n }\n }\n }\n processInboundRTPResult(result, mediaType) {\n var sendrecvType = MediaDirection.RECEIVE;\n if (result.bytesReceived) {\n var kilobytes = 0;\n var sourceState = result.sourceState;\n var midAndCsi = \"mid: \\\"\".concat(result.mid || '', \"\\\"\").concat(result.csi ? \" and csi: \".concat(result.csi) : '');\n var bytes = result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;\n kilobytes = bytes / 1024;\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n var currentPacketsLost = result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;\n if (currentPacketsLost < 0) {\n currentPacketsLost = 0;\n }\n var packetsReceivedDiff = result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n if (packetsReceivedDiff === 0) {\n if (sourceState === 'live') {\n getLogger().info(\"StatsAnalyzer:index#processInboundRTPResult --> No packets received for mediaType: \".concat(mediaType, \", receive slot \").concat(midAndCsi, \". Total packets received on slot: \"), result.packetsReceived);\n }\n }\n if (mediaType.startsWith('video') || mediaType.startsWith('share')) {\n var videoFramesReceivedDiff = result.framesReceived - this.statsResults[mediaType][sendrecvType].framesReceived;\n if (videoFramesReceivedDiff === 0) {\n if (sourceState === 'live') {\n getLogger().info(\"StatsAnalyzer:index#processInboundRTPResult --> No frames received for mediaType: \".concat(mediaType, \", receive slot \").concat(midAndCsi, \". Total frames received on slot: \"), result.framesReceived);\n }\n }\n var videoFramesDecodedDiff = result.framesDecoded - this.statsResults[mediaType][sendrecvType].framesDecoded;\n if (videoFramesDecodedDiff === 0) {\n if (sourceState === 'live') {\n getLogger().info(\"StatsAnalyzer:index#processInboundRTPResult --> No frames decoded for mediaType: \".concat(mediaType, \", receive slot \").concat(midAndCsi, \". Total frames decoded on slot: \"), result.framesDecoded);\n }\n }\n var videoFramesDroppedDiff = result.framesDropped - this.statsResults[mediaType][sendrecvType].framesDropped;\n if (videoFramesDroppedDiff > 10) {\n if (sourceState === 'live') {\n getLogger().info(\"StatsAnalyzer:index#processInboundRTPResult --> Frames dropped for mediaType: \".concat(mediaType, \", receive slot \").concat(midAndCsi, \". Total frames dropped on slot: \"), result.framesDropped);\n }\n }\n }\n if (mediaType.startsWith('video-recv')) {\n this.statsResults[mediaType][sendrecvType].isActiveSpeaker = result.isActiveSpeaker;\n this.statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp = result.lastActiveSpeakerUpdateTimestamp;\n }\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (packetsReceivedDiff + currentPacketsLost) : 0;\n if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {\n getLogger().info(\"StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot \".concat(midAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);\n }\n if (result.frameWidth && result.frameHeight) {\n this.statsResults[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;\n }\n if (result.packetsLost) {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;\n } else {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;\n }\n this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;\n this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;\n this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;\n this.statsResults[mediaType][sendrecvType].requestedFrameRate = result.requestedFrameRate;\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;\n this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;\n this.statsResults[mediaType][sendrecvType].framesDropped = result.framesDropped;\n this.statsResults[mediaType][sendrecvType].decoderImplementation = result.decoderImplementation;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;\n this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;\n this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;\n this.statsResults[mediaType][sendrecvType].totalRtxPacketsReceived = result.retransmittedPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalRtxBytesReceived = result.retransmittedBytesReceived;\n this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);\n this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;\n this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;\n this.statsResults[mediaType][sendrecvType].totalSamplesReceived = result.totalSamplesReceived || 0;\n this.statsResults[mediaType][sendrecvType].totalSamplesDecoded = result.totalSamplesDecoded || 0;\n this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;\n this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;\n this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp = result.lastRequestedUpdateTimestamp;\n }\n }\n compareSentAndReceived(result, type) {\n if (!type || !this.statsResults[type].send) {\n return;\n }\n var mediaType = type;\n var currentPacketLoss = result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;\n this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;\n this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;\n this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);\n this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);\n this.statsResults[mediaType].send.timestamp = result.timestamp;\n this.statsResults[mediaType].send.ssrc = result.ssrc;\n this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;\n this.statsResults[mediaType].send.overAllPacketLossRatio = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;\n this.statsResults[mediaType].send.currentPacketLossRatio = this.statsResults[mediaType].send.packetsLostOnReceiver > 0 ? this.statsResults[mediaType].send.packetsLostOnReceiver * 100 / (this.statsResults[mediaType].send.packetsSent + this.statsResults[mediaType].send.packetsLostOnReceiver) : 0;\n if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {\n this.statsResults[mediaType].send.maxPacketLossRatio = this.statsResults[mediaType].send.currentPacketLossRatio;\n }\n if (result.type === 'remote-inbound-rtp') {\n this.networkQualityMonitor.determineUplinkNetworkQuality({\n mediaType,\n remoteRtpResults: result,\n statsAnalyzerCurrentStats: this.statsResults\n });\n }\n }\n}\n\nclass NetworkQualityMonitor extends EventEmitter$5 {\n constructor(config) {\n super();\n _defineProperty(this, \"config\", void 0);\n _defineProperty(this, \"frequencyTypes\", void 0);\n _defineProperty(this, \"indicatorTypes\", void 0);\n _defineProperty(this, \"networkQualityScore\", void 0);\n _defineProperty(this, \"networkQualityStatus\", void 0);\n this.config = config;\n this.indicatorTypes = Object.freeze({\n PACKETLOSS: 'packetLoss',\n LATENCY: 'latency',\n JITTER: 'jitter'\n });\n this.frequencyTypes = Object.freeze({\n UPLINK: 'uplink',\n DOWNLINK: 'downlink'\n });\n this.networkQualityScore = 1;\n this.networkQualityStatus = {\n [this.frequencyTypes.UPLINK]: {}\n };\n }\n emitNetworkQuality(mediaType) {\n this.emit(NetworkQualityEventNames.NETWORK_QUALITY, {\n mediaType,\n networkQualityScore: this.networkQualityScore\n });\n }\n updateNetworkQualityStatus(mediaType) {\n this.emitNetworkQuality(mediaType);\n this.networkQualityScore = 1;\n }\n determineUplinkNetworkQuality(_ref) {\n var {\n mediaType,\n remoteRtpResults,\n statsAnalyzerCurrentStats\n } = _ref;\n var roundTripTimeInMilliseconds = remoteRtpResults.roundTripTime * 1000;\n var jitterInMilliseconds = remoteRtpResults.jitter * 1000;\n var {\n currentPacketLossRatio\n } = statsAnalyzerCurrentStats[mediaType].send;\n var {\n JITTER,\n PACKETLOSS,\n LATENCY\n } = this.indicatorTypes;\n var {\n UPLINK\n } = this.frequencyTypes;\n var determinePacketLoss = () => {\n if (this.config.videoPacketLossRatioThreshold !== undefined && currentPacketLossRatio > this.config.videoPacketLossRatioThreshold) {\n this.networkQualityScore = 0;\n return false;\n }\n return true;\n };\n var determineLatency = () => {\n if (this.config.rttThreshold !== undefined && roundTripTimeInMilliseconds > this.config.rttThreshold) {\n this.networkQualityScore = 0;\n return false;\n }\n return true;\n };\n var determineJitter = () => {\n if (this.config.jitterThreshold !== undefined && jitterInMilliseconds > this.config.jitterThreshold) {\n this.networkQualityScore = 0;\n return false;\n }\n return true;\n };\n var getValueOrNull = value => typeof value === 'undefined' ? null : value;\n if (mediaType !== null) {\n if (!this.networkQualityStatus[UPLINK][mediaType]) {\n this.networkQualityStatus[UPLINK][mediaType] = {};\n }\n this.networkQualityStatus[UPLINK][mediaType][PACKETLOSS] = {\n acceptable: determinePacketLoss(),\n value: getValueOrNull(currentPacketLossRatio)\n };\n this.networkQualityStatus[UPLINK][mediaType][LATENCY] = {\n acceptable: determineLatency(),\n value: getValueOrNull(remoteRtpResults.roundTripTime)\n };\n this.networkQualityStatus[UPLINK][mediaType][JITTER] = {\n acceptable: determineJitter(),\n value: getValueOrNull(remoteRtpResults.jitter)\n };\n this.updateNetworkQualityStatus(mediaType);\n }\n }\n get networkQualityStats() {\n var {\n UPLINK\n } = this.frequencyTypes;\n return this.networkQualityStatus[UPLINK];\n }\n}\n\nvar Media = {\n createAudioTrack: createAudioTrack,\n createVideoTrack: createVideoTrack,\n createContentTrack: createContentTrack,\n getCameras: getCameras,\n getMicrophones: getMicrophones,\n getSpeakers: getSpeakers,\n on: on$1,\n off: off$1,\n Effects: {\n BNR: {\n enableBNR: enableBNR,\n disableBNR: disableBNR\n }\n }\n};\n\nexport { ActiveSpeakerInfo, CodecInfo$1 as CodecInfo, ConnectionState, ErrorType, Errors, H264Codec, LocalCameraStream, LocalDisplayStream, LocalMicrophoneStream, LocalStream, LocalStreamEventNames, LocalSystemAudioStream, Media, MediaConnectionEventNames, MediaContent, MediaFamily, MediaStreamTrackKind, MediaType, MultistreamRoapMediaConnection, NetworkQualityEventNames, NetworkQualityMonitor, PeerConnection, Policy, ReceiveSlot, ReceiveSlotEvents, ReceiverSelectedInfo, RecommendedOpusBitrates, RemoteStream, RemoteStreamEventNames, RemoteTrackType, RoapMediaConnection, SendSlot, StatsAnalyzer, StatsAnalyzerEventNames, StreamEventNames, StreamRequest, WcmeError, WcmeErrorType, configureWcmeLogger, createCameraAndMicrophoneStreams, createCameraStream, createDisplayMedia, createDisplayStream, createDisplayStreamWithAudio, createMicrophoneStream, getAudioInputDevices, getAudioOutputDevices, getDevices, getErrorDescription, getLogger, getMediaFamily, getRecommendedMaxBitrateForFrameSize, getVideoInputDevices, setLogger, setOnDeviceChangeHandler };\n"],"names":[],"sourceRoot":""}