-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
dash.protection.debug.js.map
1 lines (1 loc) · 484 KB
/
dash.protection.debug.js.map
1
{"version":3,"file":"dash.protection.debug.js","mappings":"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,GAAX;AACH;;AAGL,+DAAeye,OAAf;;;;;;;;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;IACMkF;AACF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACI,yBAAY3a,SAAZ,EAAuBghB,eAAvB,EAAwC;AAAA;;AACpC,OAAKhhB,SAAL,GAAiBA,SAAjB;AACA,OAAKghB,eAAL,GAAuBA,eAAvB;AACH;;AAGL,+DAAerG,eAAf;;;;;;;;;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;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;IACMtX;AACF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,gCAAY8H,iBAAZ,EAA+BC,iBAA/B,EAAkDI,qBAAlD,EAAyEC,eAAzE,EAA0FmY,YAA1F,EAAwG;AAAA;;AACpG,OAAKC,aAAL,GAAqB,CAAE,MAAF,CAArB;;AACA,MAAI1Y,iBAAiB,IAAIA,iBAAiB,CAAC3U,MAA3C,EAAmD;AAC/C,SAAK2U,iBAAL,GAAyBA,iBAAzB;AACH;;AACD,MAAIC,iBAAiB,IAAIA,iBAAiB,CAAC5U,MAA3C,EAAmD;AAC/C,SAAK4U,iBAAL,GAAyBA,iBAAzB;AACH;;AACD,OAAKI,qBAAL,GAA6BA,qBAA7B;AACA,OAAKC,eAAL,GAAuBA,eAAvB;AACA,OAAKmY,YAAL,GAAoBA,YAApB;AACH;;AAGL,+DAAevgB,sBAAf;;;;;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;IACMG;AACF;AACJ;AACA;AACA;AACA;AACI,wBAAY9M,GAAZ,EAAiB2Z,MAAjB,EAAyBxB,YAAzB,EAAuCtX,OAAvC,EAAgDyV,eAAhD,EAAiEjB,WAAjE,EAA8EjD,SAA9E,EAAyFrI,IAAzF,EAA+F;AAAA;;AAE3F;AACR;AACA;AACQ,OAAK/J,GAAL,GAAWA,GAAX;AAEA;AACR;AACA;;AACQ,OAAK2Z,MAAL,GAAcA,MAAd;AAEA;AACR;AACA;;AACQ,OAAKxB,YAAL,GAAoBA,YAApB;AAEA;AACR;AACA;;AACQ,OAAKtX,OAAL,GAAeA,OAAf;AAEA;AACR;AACA;;AACQ,OAAKyV,eAAL,GAAuBA,eAAvB;AAEA;AACR;AACA;;AACQ,OAAKjB,WAAL,GAAmBA,WAAnB;AAEA;AACR;AACA;;AACQ,OAAKjD,SAAL,GAAiBA,SAAjB;AAEA;AACR;AACA;;AACQ,OAAKrI,IAAL,GAAYA,IAAZ;AACH;;AAGL,+DAAe+C,cAAf;;;;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;IACMC;AACF;AACJ;AACA;AACA;AACA;AACA;AACI,yBAAY/M,GAAZ,EAAiBa,OAAjB,EAA0BkJ,IAA1B,EAAgC;AAAA;;AAE5B;AACR;AACA;AACQ,OAAK/J,GAAL,GAAWA,GAAX;AAEA;AACR;AACA;;AACQ,OAAKa,OAAL,GAAeA,OAAf;AAEA;AACR;AACA;;AACQ,OAAKkJ,IAAL,GAAYA,IAAZ;AACH;;AAGL,+DAAegD,eAAf;;;;;;;;;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;IACML;AACF;AACJ;AACA;AACA;AACA;AACA;AACI,yBAAY8Y,WAAZ,EAAyB4H,UAAzB,EAAqC;AAAA;;AACjC,OAAK5H,WAAL,GAAmBA,WAAnB;AACA,OAAK4H,UAAL,GAAkBA,UAAlB;AACH;;AAGL,+DAAe1gB,eAAf;;;;;;;;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;IACMqX;AACF;AACJ;AACA;AACA;AACA;AACI,iBAAYxa,QAAZ,EAAsB6S,YAAtB,EAAoC;AAAA;;AAChC,OAAK7S,QAAL,GAAgBA,QAAhB;AACA,OAAK6S,YAAL,GAAoBA,YAApB;AACH;;AAGL,+DAAe2H,OAAf;;;;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;IACMlX,cACF,qBAAY+Z,IAAZ,EAAkB9T,OAAlB,EAA2B/I,IAA3B,EAAiC;AAAA;;AAC7B,OAAK6c,IAAL,GAAYA,IAAI,IAAI,IAApB;AACA,OAAK9T,OAAL,GAAeA,OAAO,IAAI,IAA1B;AACA,OAAK/I,IAAL,GAAYA,IAAI,IAAI,IAApB;AACH;;AAGL,+DAAe8C,WAAf;;;;;;;;;;;;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;IACMG;AACF;AACJ;AACA;AACI,uBAAc;AAAA;;AACV;AACR;AACA;AACA;AACQ,OAAKqgB,KAAL,GAAa,IAAb;AACA;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACQ,OAAKpY,IAAL,GAAY,IAAZ;AACA;AACR;AACA;AACA;;AACQ,OAAKjV,GAAL,GAAW,IAAX;AACA;AACR;AACA;AACA;;AACQ,OAAKstB,SAAL,GAAiB,IAAjB;AACA;AACR;AACA;AACA;;AACQ,OAAKC,KAAL,GAAa,IAAb;AACA;AACR;AACA;AACA;;AACQ,OAAKC,QAAL,GAAgB,IAAhB;AACA;AACR;AACA;AACA;;AACQ,OAAKC,SAAL,GAAiB,IAAjB;AACA;AACR;AACA;AACA;;AACQ,OAAKC,YAAL,GAAoB,IAApB;AACA;AACR;AACA;AACA;;AACQ,OAAKC,QAAL,GAAgB,IAAhB;AACA;AACR;AACA;AACA;;AACQ,OAAKC,KAAL,GAAa,EAAb;AACA;AACR;AACA;AACA;;AACQ,OAAKC,IAAL,GAAY,IAAZ;AAEA;AACR;AACA;AACA;;AACQ,OAAKC,OAAL,GAAe,IAAf;AACA;AACR;AACA;AACA;;AACQ,OAAKC,QAAL,GAAgB,IAAhB;AACA;AACR;AACA;AACA;;AACQ,OAAKC,cAAL,GAAsB,IAAtB;AACA;AACR;AACA;AACA;;AACQ,OAAKC,QAAL,GAAgB,IAAhB;AACA;AACR;AACA;AACA;;AACQ,OAAKC,gBAAL,GAAwB,IAAxB;AACA;AACR;AACA;AACA;;AACQ,OAAKC,gBAAL,GAAwB,IAAxB;AACA;AACR;AACA;;AACQ,OAAKC,eAAL,GAAuB,IAAvB;AACH;AAGL;AACA;AACA;AACA;;;IACMC;AACF;AACJ;AACA;AACI,4BAAc;AAAA;;AACV;AACR;AACA;AACA;AACQ,OAAK9uB,CAAL,GAAS,IAAT;AACA;AACR;AACA;AACA;;AACQ,OAAK+uB,CAAL,GAAS,IAAT;AACA;AACR;AACA;AACA;;AACQ,OAAKC,CAAL,GAAS,EAAT;AACH;;AAGLvhB,WAAW,CAACwhB,GAAZ,GAAkB,KAAlB;AACAxhB,WAAW,CAACyhB,IAAZ,GAAmB,MAAnB;AACAzhB,WAAW,CAAC0hB,QAAZ,GAAuB,KAAvB;AACA1hB,WAAW,CAAC2hB,oBAAZ,GAAmC,gBAAnC;AACA3hB,WAAW,CAAC4hB,iBAAZ,GAAgC,uBAAhC;AACA5hB,WAAW,CAAC6hB,kBAAZ,GAAiC,cAAjC;AACA7hB,WAAW,CAAC8hB,kBAAZ,GAAiC,cAAjC;AACA9hB,WAAW,CAAC+hB,gCAAZ,GAA+C,2BAA/C;AACA/hB,WAAW,CAACgiB,8BAAZ,GAA6C,qBAA7C;AACAhiB,WAAW,CAACiiB,kBAAZ,GAAiC,cAAjC;AACAjiB,WAAW,CAAC4L,OAAZ,GAAsB,SAAtB;AACA5L,WAAW,CAACkiB,qBAAZ,GAAoC,iBAApC;AACAliB,WAAW,CAACmiB,UAAZ,GAAyB,OAAzB;;;;;;;;;;;;ACrLA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAuC,8BAA8B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,qBAAqB;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,YAAY;AACZ;AACA,sCAAsC;AACtC;AACA;AACA,UAAU;AACV;AACA;AACA,iDAAiD;AACjD;AACA,YAAY;AACZ;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,cAAc;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gDAAgD;AAChD;AACA,MAAM;AACN,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF;AACpF;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA,8DAA8D;;AAE9D;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;;;;;;;;AChhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;;AAGA;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;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,0BAA0B,cAAc;AACxC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,6CAA6C;AAC7C;;AAEA;AACA;;AAEA,qCAAqC;AACrC;;AAEA;AACA,oCAAoC,kBAAkB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;;AAEA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,IAAI;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C,IAAI;AAClD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,sDAAsD,gBAAgB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,8CAA8C,GAAG;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;;AAEA;;AAEA,sDAAsD;AACtD;;AAEA,sBAAsB;AACtB;;AAEA,+BAA+B;AAC/B;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,kCAAkC,IAAI;AACtC;;AAEA,8CAA8C;AAC9C;;AAEA,uBAAuB;AACvB;;AAEA,+BAA+B,0CAA0C;AACzE;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAkD,IAAI,WAAW,IAAI;AACrE;AACA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;AACnD;AACA,sBAAsB,SAAS;AAC/B;AACA,kCAAkC;AAClC;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;;AAEA;AACA,wDAAwD,EAAE;AAC1D;AACA,wCAAwC;AACxC,4BAA4B,IAAI;AAChC;;AAEA;AACA,gCAAgC,EAAE,WAAW,EAAE;AAC/C,iBAAiB;AACjB;AACA;AACA,wBAAwB,qBAAqB,IAAI,cAAc;AAC/D;AACA;AACA,wBAAwB,KAAK,EAAE;AAC/B;AACA;;AAEA;AACA,eAAe;AACf,0BAA0B,EAAE;AAC5B;;AAEA;AACA;AACA,wBAAwB,EAAE,iBAAiB;AAC3C;;AAEA;AACA,2BAA2B,EAAE,UAAU;AACvC;;AAEA;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA,gCAAgC,IAAI;AACpC;;AAEA;AACA,gCAAgC,EAAE,gBAAgB,EAAE,GAAG,aAAa,IAAI;AACxE;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA,6DAA6D,EAAE,WAAW,EAAE;AAC5E;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,eAAe,IAAI;AACzC;;AAEA;AACA,gCAAgC,EAAE,WAAW,EAAE,yDAAyD,IAAI;AAC5G;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,EAAE,YAAY,EAAE;AACtC;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA,0CAA0C,MAAM;AAChD;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,IAAI,IAAI;;AAE7B;AACA;AACA,wDAAwD;AACxD;;AAEA;AACA,sBAAsB;AACtB;;AAEA;AACA,sBAAsB;AACtB,yBAAyB,GAAG;AAC5B;AACA;AACA;AACA,eAAe,0BAA0B,IAAI;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,IAAI;AACtC,gCAAgC,EAAE;AAClC,gCAAgC,IAAI;AACpC;AACA;;AAEA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,IAAI;AAC/B;AACA;AACA;AACA;AACA;AACA,qBAAqB,EAAE;AACvB;AACA;AACA;AACA,qBAAqB,EAAE;AACvB;AACA,sBAAsB,EAAE;AACxB;AACA,sBAAsB,EAAE;AACxB;AACA;AACA;AACA,uBAAuB,EAAE;AACzB,yCAAyC,EAAE;AAC3C;AACA,uBAAuB,IAAI;AAC3B;AACA,+BAA+B,IAAI;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,EAAE;AAC7B;AACA,sBAAsB;AACtB;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B;AAC1B;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,sBAAsB,EAAE;AACxB;AACA,qCAAqC;AACrC;AACA;AACA,+CAA+C,WAAW,IAAI,IAAI;AAClE;AACA,qDAAqD;AACrD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,kCAAkC,WAAW;AAC7C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,sBAAsB,QAAQ,IAAI;AAClC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAwB,IAAI,cAAc;AAC1C;AACA,wBAAwB,IAAI;AAC5B;AACA,8BAA8B;AAC9B;AACA,+BAA+B;AAC/B;AACA,8BAA8B,IAAI,EAAE;AACpC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,IAAI;AAC7B;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;;AAEA;AACA,wBAAwB,IAAI,6BAA6B;AACzD,oBAAoB;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,sBAAsB;AACtB;AACA,0CAA0C;AAC1C;AACA,4DAA4D,SAAS;AACrE;AACA,mBAAmB;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB;AACvB;AACA;;AAEA;AACA;AACA,qBAAqB,YAAY;;AAEjC;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA,+BAA+B,IAAI,mCAAmC,IAAI;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;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;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAa;AACzB;AACA;AACA,QAAQ,gBAAgB;AACxB,MAAM;AACN;AACA,YAAY,UAAc,kBAAkB,wBAAU;AACtD,YAAY,mCAAO;AACnB;AACA,aAAa;AAAA,kGAAC;AACd,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;;;;UCj7BD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;;;;;WCAA;WACA;WACA;WACA,eAAe,4BAA4B;WAC3C,eAAe;WACf,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA,8CAA8C;;;;;WCA9C;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,IAAMC,wBAAwB,GAAG,CAC7B;AACA;AACI;AACA9I,EA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","sources":["webpack://dashjs/webpack/universalModuleDefinition","webpack://dashjs/./src/core/FactoryMaker.js","webpack://dashjs/./src/core/Utils.js","webpack://dashjs/./src/core/errors/ErrorsBase.js","webpack://dashjs/./src/core/events/EventsBase.js","webpack://dashjs/./src/streaming/constants/Constants.js","webpack://dashjs/./src/streaming/constants/ProtectionConstants.js","webpack://dashjs/./src/streaming/protection/CommonEncryption.js","webpack://dashjs/./src/streaming/protection/ProtectionEvents.js","webpack://dashjs/./src/streaming/protection/controllers/ProtectionController.js","webpack://dashjs/./src/streaming/protection/controllers/ProtectionKeyController.js","webpack://dashjs/./src/streaming/protection/drm/KeySystemClearKey.js","webpack://dashjs/./src/streaming/protection/drm/KeySystemPlayReady.js","webpack://dashjs/./src/streaming/protection/drm/KeySystemW3CClearKey.js","webpack://dashjs/./src/streaming/protection/drm/KeySystemWidevine.js","webpack://dashjs/./src/streaming/protection/errors/ProtectionErrors.js","webpack://dashjs/./src/streaming/protection/models/ProtectionModel_01b.js","webpack://dashjs/./src/streaming/protection/models/ProtectionModel_21Jan2015.js","webpack://dashjs/./src/streaming/protection/models/ProtectionModel_3Feb2014.js","webpack://dashjs/./src/streaming/protection/servers/ClearKey.js","webpack://dashjs/./src/streaming/protection/servers/DRMToday.js","webpack://dashjs/./src/streaming/protection/servers/PlayReady.js","webpack://dashjs/./src/streaming/protection/servers/Widevine.js","webpack://dashjs/./src/streaming/protection/vo/ClearKeyKeySet.js","webpack://dashjs/./src/streaming/protection/vo/KeyMessage.js","webpack://dashjs/./src/streaming/protection/vo/KeyPair.js","webpack://dashjs/./src/streaming/protection/vo/KeySystemAccess.js","webpack://dashjs/./src/streaming/protection/vo/KeySystemConfiguration.js","webpack://dashjs/./src/streaming/protection/vo/LicenseRequest.js","webpack://dashjs/./src/streaming/protection/vo/LicenseResponse.js","webpack://dashjs/./src/streaming/protection/vo/MediaCapability.js","webpack://dashjs/./src/streaming/protection/vo/NeedKey.js","webpack://dashjs/./src/streaming/vo/DashJSError.js","webpack://dashjs/./src/streaming/vo/metrics/HTTPRequest.js","webpack://dashjs/./node_modules/path-browserify/index.js","webpack://dashjs/./node_modules/ua-parser-js/src/ua-parser.js","webpack://dashjs/webpack/bootstrap","webpack://dashjs/webpack/runtime/amd options","webpack://dashjs/webpack/runtime/compat get default export","webpack://dashjs/webpack/runtime/define property getters","webpack://dashjs/webpack/runtime/hasOwnProperty shorthand","webpack://dashjs/webpack/runtime/make namespace object","webpack://dashjs/./src/streaming/protection/Protection.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"dashjs\"] = factory();\n\telse\n\t\troot[\"dashjs\"] = factory();\n})(self, function() {\nreturn ","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @module FactoryMaker\n * @ignore\n */\nconst FactoryMaker = (function () {\n\n let instance;\n let singletonContexts = [];\n const singletonFactories = {};\n const classFactories = {};\n\n function extend(name, childInstance, override, context) {\n if (!context[name] && childInstance) {\n context[name] = {\n instance: childInstance,\n override: override\n };\n }\n }\n\n /**\n * Use this method from your extended object. this.factory is injected into your object.\n * this.factory.getSingletonInstance(this.context, 'VideoModel')\n * will return the video model for use in the extended object.\n *\n * @param {Object} context - injected into extended object as this.context\n * @param {string} className - string name found in all dash.js objects\n * with name __dashjs_factory_name Will be at the bottom. Will be the same as the object's name.\n * @returns {*} Context aware instance of specified singleton name.\n * @memberof module:FactoryMaker\n * @instance\n */\n function getSingletonInstance(context, className) {\n for (const i in singletonContexts) {\n const obj = singletonContexts[i];\n if (obj.context === context && obj.name === className) {\n return obj.instance;\n }\n }\n return null;\n }\n\n /**\n * Use this method to add an singleton instance to the system. Useful for unit testing to mock objects etc.\n *\n * @param {Object} context\n * @param {string} className\n * @param {Object} instance\n * @memberof module:FactoryMaker\n * @instance\n */\n function setSingletonInstance(context, className, instance) {\n for (const i in singletonContexts) {\n const obj = singletonContexts[i];\n if (obj.context === context && obj.name === className) {\n singletonContexts[i].instance = instance;\n return;\n }\n }\n singletonContexts.push({\n name: className,\n context: context,\n instance: instance\n });\n }\n\n /**\n * Use this method to remove all singleton instances associated with a particular context.\n *\n * @param {Object} context\n * @memberof module:FactoryMaker\n * @instance\n */\n function deleteSingletonInstances(context) {\n singletonContexts = singletonContexts.filter(x => x.context !== context);\n }\n\n /*------------------------------------------------------------------------------------------*/\n\n // Factories storage Management\n\n /*------------------------------------------------------------------------------------------*/\n\n function getFactoryByName(name, factoriesArray) {\n return factoriesArray[name];\n }\n\n function updateFactory(name, factory, factoriesArray) {\n if (name in factoriesArray) {\n factoriesArray[name] = factory;\n }\n }\n\n /*------------------------------------------------------------------------------------------*/\n\n // Class Factories Management\n\n /*------------------------------------------------------------------------------------------*/\n\n function updateClassFactory(name, factory) {\n updateFactory(name, factory, classFactories);\n }\n\n function getClassFactoryByName(name) {\n return getFactoryByName(name, classFactories);\n }\n\n function getClassFactory(classConstructor) {\n let factory = getFactoryByName(classConstructor.__dashjs_factory_name, classFactories);\n\n if (!factory) {\n factory = function (context) {\n if (context === undefined) {\n context = {};\n }\n return {\n create: function () {\n return merge(classConstructor, context, arguments);\n }\n };\n };\n\n classFactories[classConstructor.__dashjs_factory_name] = factory; // store factory\n }\n return factory;\n }\n\n /*------------------------------------------------------------------------------------------*/\n\n // Singleton Factory MAangement\n\n /*------------------------------------------------------------------------------------------*/\n\n function updateSingletonFactory(name, factory) {\n updateFactory(name, factory, singletonFactories);\n }\n\n function getSingletonFactoryByName(name) {\n return getFactoryByName(name, singletonFactories);\n }\n\n function getSingletonFactory(classConstructor) {\n let factory = getFactoryByName(classConstructor.__dashjs_factory_name, singletonFactories);\n if (!factory) {\n factory = function (context) {\n let instance;\n if (context === undefined) {\n context = {};\n }\n return {\n getInstance: function () {\n // If we don't have an instance yet check for one on the context\n if (!instance) {\n instance = getSingletonInstance(context, classConstructor.__dashjs_factory_name);\n }\n // If there's no instance on the context then create one\n if (!instance) {\n instance = merge(classConstructor, context, arguments);\n singletonContexts.push({\n name: classConstructor.__dashjs_factory_name,\n context: context,\n instance: instance\n });\n }\n return instance;\n }\n };\n };\n singletonFactories[classConstructor.__dashjs_factory_name] = factory; // store factory\n }\n\n return factory;\n }\n\n function merge(classConstructor, context, args) {\n\n let classInstance;\n const className = classConstructor.__dashjs_factory_name;\n const extensionObject = context[className];\n\n if (extensionObject) {\n\n let extension = extensionObject.instance;\n\n if (extensionObject.override) { //Override public methods in parent but keep parent.\n\n classInstance = classConstructor.apply({context}, args);\n extension = extension.apply({\n context,\n factory: instance,\n parent: classInstance\n }, args);\n\n for (const prop in extension) {\n if (classInstance.hasOwnProperty(prop)) {\n classInstance[prop] = extension[prop];\n }\n }\n\n } else { //replace parent object completely with new object. Same as dijon.\n\n return extension.apply({\n context,\n factory: instance\n }, args);\n\n }\n } else {\n // Create new instance of the class\n classInstance = classConstructor.apply({context}, args);\n }\n\n // Add getClassName function to class instance prototype (used by Debug)\n classInstance.getClassName = function () {return className;};\n\n return classInstance;\n }\n\n instance = {\n extend: extend,\n getSingletonInstance: getSingletonInstance,\n setSingletonInstance: setSingletonInstance,\n deleteSingletonInstances: deleteSingletonInstances,\n getSingletonFactory: getSingletonFactory,\n getSingletonFactoryByName: getSingletonFactoryByName,\n updateSingletonFactory: updateSingletonFactory,\n getClassFactory: getClassFactory,\n getClassFactoryByName: getClassFactoryByName,\n updateClassFactory: updateClassFactory\n };\n\n return instance;\n\n}());\n\nexport default FactoryMaker;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @class\n * @ignore\n */\n\nimport path from 'path-browserify'\nimport { UAParser } from 'ua-parser-js'\n\nclass Utils {\n static mixin(dest, source, copy) {\n let s;\n let empty = {};\n if (dest) {\n for (let name in source) {\n if (source.hasOwnProperty(name)) {\n s = source[name];\n if (!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))) {\n if (typeof dest[name] === 'object' && dest[name] !== null) {\n dest[name] = Utils.mixin(dest[name], s, copy);\n } else {\n dest[name] = copy(s);\n }\n }\n }\n }\n }\n return dest;\n }\n\n static clone(src) {\n if (!src || typeof src !== 'object') {\n return src; // anything\n }\n let r;\n if (src instanceof Array) {\n // array\n r = [];\n for (let i = 0, l = src.length; i < l; ++i) {\n if (i in src) {\n r.push(Utils.clone(src[i]));\n }\n }\n } else {\n r = {};\n }\n return Utils.mixin(r, src, Utils.clone);\n }\n\n static addAditionalQueryParameterToUrl(url, params) {\n try {\n if (!params || params.length === 0) {\n return url;\n }\n\n let modifiedUrl = new URL(url);\n\n params.forEach((param) => {\n if (param.key && param.value) {\n modifiedUrl.searchParams.set(param.key, param.value);\n }\n });\n\n return modifiedUrl.href;\n\n\n } catch (e) {\n return url;\n }\n }\n\n static parseHttpHeaders(headerStr) {\n let headers = {};\n if (!headerStr) {\n return headers;\n }\n\n // Trim headerStr to fix a MS Edge bug with xhr.getAllResponseHeaders method\n // which send a string starting with a \"\\n\" character\n let headerPairs = headerStr.trim().split('\\u000d\\u000a');\n for (let i = 0, ilen = headerPairs.length; i < ilen; i++) {\n let headerPair = headerPairs[i];\n let index = headerPair.indexOf('\\u003a\\u0020');\n if (index > 0) {\n headers[headerPair.substring(0, index)] = headerPair.substring(index + 2);\n }\n }\n return headers;\n }\n\n static generateUuid() {\n let dt = new Date().getTime();\n const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (dt + Math.random() * 16) % 16 | 0;\n dt = Math.floor(dt / 16);\n return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n });\n return uuid;\n }\n\n static generateHashCode(string) {\n let hash = 0;\n\n if (string.length === 0) {\n return hash;\n }\n\n for (let i = 0; i < string.length; i++) {\n const chr = string.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0;\n }\n return hash;\n }\n\n /**\n * Compares both urls and returns a relative url (target relative to original)\n * @param {string} originalUrl\n * @param {string} targetUrl\n * @return {string|*}\n */\n static getRelativeUrl(originalUrl, targetUrl) {\n try {\n const original = new URL(originalUrl);\n const target = new URL(targetUrl);\n\n // Unify the protocol to compare the origins\n original.protocol = target.protocol;\n if (original.origin !== target.origin) {\n return targetUrl;\n }\n\n // Use the relative path implementation of the path library. We need to cut off the actual filename in the end to get the relative path\n let relativePath = path.relative(original.pathname.substr(0, original.pathname.lastIndexOf('/')), target.pathname.substr(0, target.pathname.lastIndexOf('/')));\n\n // In case the relative path is empty (both path are equal) return the filename only. Otherwise add a slash in front of the filename\n const startIndexOffset = relativePath.length === 0 ? 1 : 0;\n relativePath += target.pathname.substr(target.pathname.lastIndexOf('/') + startIndexOffset, target.pathname.length - 1);\n\n // Build the other candidate, e.g. the 'host relative' path that starts with \"/\", and return the shortest of the two candidates.\n if (target.pathname.length < relativePath.length) {\n return target.pathname;\n }\n return relativePath;\n } catch (e) {\n return targetUrl\n }\n }\n\n static parseUserAgent(ua = null) {\n try {\n const uaString = ua === null ? typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase() : '' : '';\n\n return UAParser(uaString);\n }\n catch(e) {\n return {};\n }\n }\n\n /**\n * Checks for existence of \"http\" or \"https\" in a string\n * @param string\n * @returns {boolean}\n */\n static stringHasProtocol(string) {\n return (/(http(s?)):\\/\\//i.test(string))\n }\n}\n\nexport default Utils;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass ErrorsBase {\n extend (errors, config) {\n if (!errors) return;\n\n let override = config ? config.override : false;\n let publicOnly = config ? config.publicOnly : false;\n\n\n for (const err in errors) {\n if (!errors.hasOwnProperty(err) || (this[err] && !override)) continue;\n if (publicOnly && errors[err].indexOf('public_') === -1) continue;\n this[err] = errors[err];\n\n }\n }\n}\n\nexport default ErrorsBase;","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass EventsBase {\n extend (events, config) {\n if (!events) return;\n\n let override = config ? config.override : false;\n let publicOnly = config ? config.publicOnly : false;\n\n\n for (const evt in events) {\n if (!events.hasOwnProperty(evt) || (this[evt] && !override)) continue;\n if (publicOnly && events[evt].indexOf('public_') === -1) continue;\n this[evt] = events[evt];\n\n }\n }\n}\n\nexport default EventsBase;","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Constants declaration\n * @class\n * @ignore\n * @hideconstructor\n */\nclass Constants {\n\n init() {\n /**\n * @constant {string} STREAM Stream media type. Mainly used to report metrics relative to the full stream\n * @memberof Constants#\n * @static\n */\n this.STREAM = 'stream';\n\n /**\n * @constant {string} VIDEO Video media type\n * @memberof Constants#\n * @static\n */\n this.VIDEO = 'video';\n\n /**\n * @constant {string} AUDIO Audio media type\n * @memberof Constants#\n * @static\n */\n this.AUDIO = 'audio';\n\n /**\n * @constant {string} TEXT Text media type\n * @memberof Constants#\n * @static\n */\n this.TEXT = 'text';\n\n /**\n * @constant {string} MUXED Muxed (video/audio in the same chunk) media type\n * @memberof Constants#\n * @static\n */\n this.MUXED = 'muxed';\n\n /**\n * @constant {string} IMAGE Image media type\n * @memberof Constants#\n * @static\n */\n this.IMAGE = 'image';\n\n /**\n * @constant {string} STPP STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n this.STPP = 'stpp';\n\n /**\n * @constant {string} TTML STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n this.TTML = 'ttml';\n\n /**\n * @constant {string} VTT STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n this.VTT = 'vtt';\n\n /**\n * @constant {string} WVTT STTP Subtitles format\n * @memberof Constants#\n * @static\n */\n this.WVTT = 'wvtt';\n\n /**\n * @constant {string} Content Steering\n * @memberof Constants#\n * @static\n */\n this.CONTENT_STEERING = 'contentSteering';\n\n /**\n * @constant {string} ABR_STRATEGY_DYNAMIC Dynamic Adaptive bitrate algorithm\n * @memberof Constants#\n * @static\n */\n this.ABR_STRATEGY_DYNAMIC = 'abrDynamic';\n\n /**\n * @constant {string} ABR_STRATEGY_BOLA Adaptive bitrate algorithm based on Bola (buffer level)\n * @memberof Constants#\n * @static\n */\n this.ABR_STRATEGY_BOLA = 'abrBola';\n\n /**\n * @constant {string} ABR_STRATEGY_L2A Adaptive bitrate algorithm based on L2A (online learning)\n * @memberof Constants#\n * @static\n */\n this.ABR_STRATEGY_L2A = 'abrL2A';\n\n /**\n * @constant {string} ABR_STRATEGY_LoLP Adaptive bitrate algorithm based on LoL+\n * @memberof Constants#\n * @static\n */\n this.ABR_STRATEGY_LoLP = 'abrLoLP';\n\n /**\n * @constant {string} ABR_STRATEGY_THROUGHPUT Adaptive bitrate algorithm based on throughput\n * @memberof Constants#\n * @static\n */\n this.ABR_STRATEGY_THROUGHPUT = 'abrThroughput';\n\n /**\n * @constant {string} ABR_FETCH_THROUGHPUT_CALUCUALTION_DOWNLOADED_DATA Throughput calculation based on downloaded data array\n * @memberof Constants#\n * @static\n */\n this.ABR_FETCH_THROUGHPUT_CALCULATION_DOWNLOADED_DATA = 'abrFetchThroughputCalculationDownloadedData';\n\n /**\n * @constant {string} ABR_FETCH_THROUGHPUT_CALCULATION_MOOF_PARSING Throughput calculation based on moof parsing\n * @memberof Constants#\n * @static\n */\n this.ABR_FETCH_THROUGHPUT_CALCULATION_MOOF_PARSING = 'abrFetchThroughputCalculationMoofParsing';\n\n /**\n * @constant {string} ABR_FETCH_THROUGHPUT_CALCULATION_AAST Throughput calculation based on adjusted availability start time in low latency mode\n * @memberof Constants#\n * @static\n */\n this.ABR_FETCH_THROUGHPUT_CALCULATION_AAST = 'abrFetchThroughputCalculationAAST';\n\n /**\n * @constant {string} LIVE_CATCHUP_MODE_DEFAULT Throughput calculation based on moof parsing\n * @memberof Constants#\n * @static\n */\n this.LIVE_CATCHUP_MODE_DEFAULT = 'liveCatchupModeDefault';\n\n /**\n * @constant {string} LIVE_CATCHUP_MODE_LOLP Throughput calculation based on moof parsing\n * @memberof Constants#\n * @static\n */\n this.LIVE_CATCHUP_MODE_LOLP = 'liveCatchupModeLoLP';\n\n /**\n * @constant {string} MOVING_AVERAGE_SLIDING_WINDOW Moving average sliding window\n * @memberof Constants#\n * @static\n */\n this.MOVING_AVERAGE_SLIDING_WINDOW = 'slidingWindow';\n\n /**\n * @constant {string} EWMA Exponential moving average\n * @memberof Constants#\n * @static\n */\n this.MOVING_AVERAGE_EWMA = 'ewma';\n\n /**\n * @constant {string} BAD_ARGUMENT_ERROR Invalid Arguments type of error\n * @memberof Constants#\n * @static\n */\n this.BAD_ARGUMENT_ERROR = 'Invalid Arguments';\n\n /**\n * @constant {string} MISSING_CONFIG_ERROR Missing configuration parameters type of error\n * @memberof Constants#\n * @static\n */\n this.MISSING_CONFIG_ERROR = 'Missing config parameter(s)';\n\n /**\n * @constant {string} TRACK_SWITCH_MODE_ALWAYS_REPLACE used to clear the buffered data (prior to current playback position) after track switch. Default for audio\n * @memberof Constants#\n * @static\n */\n this.TRACK_SWITCH_MODE_ALWAYS_REPLACE = 'alwaysReplace';\n\n /**\n * @constant {string} TRACK_SWITCH_MODE_NEVER_REPLACE used to forbid clearing the buffered data (prior to current playback position) after track switch. Defers to fastSwitchEnabled for placement of new data. Default for video\n * @memberof Constants#\n * @static\n */\n this.TRACK_SWITCH_MODE_NEVER_REPLACE = 'neverReplace';\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_FIRST_TRACK makes the player select the first track found in the manifest.\n * @memberof Constants#\n * @static\n */\n this.TRACK_SELECTION_MODE_FIRST_TRACK = 'firstTrack';\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_HIGHEST_BITRATE makes the player select the track with a highest bitrate. This mode is a default mode.\n * @memberof Constants#\n * @static\n */\n this.TRACK_SELECTION_MODE_HIGHEST_BITRATE = 'highestBitrate';\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_HIGHEST_EFFICIENCY makes the player select the track with the lowest bitrate per pixel average.\n * @memberof Constants#\n * @static\n */\n this.TRACK_SELECTION_MODE_HIGHEST_EFFICIENCY = 'highestEfficiency';\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_WIDEST_RANGE makes the player select the track with a widest range of bitrates.\n * @memberof Constants#\n * @static\n */\n this.TRACK_SELECTION_MODE_WIDEST_RANGE = 'widestRange';\n\n /**\n * @constant {string} TRACK_SELECTION_MODE_WIDEST_RANGE makes the player select the track with the highest selectionPriority as defined in the manifest\n * @memberof Constants#\n * @static\n */\n this.TRACK_SELECTION_MODE_HIGHEST_SELECTION_PRIORITY = 'highestSelectionPriority';\n\n /**\n * @constant {string} CMCD_MODE_QUERY specifies to attach CMCD metrics as query parameters.\n * @memberof Constants#\n * @static\n */\n this.CMCD_MODE_QUERY = 'query';\n\n /**\n * @constant {string} CMCD_MODE_HEADER specifies to attach CMCD metrics as HTTP headers.\n * @memberof Constants#\n * @static\n */\n this.CMCD_MODE_HEADER = 'header';\n this.INITIALIZE = 'initialize';\n this.TEXT_SHOWING = 'showing';\n this.TEXT_HIDDEN = 'hidden';\n this.TEXT_DISABLED = 'disabled';\n this.CC1 = 'CC1';\n this.CC3 = 'CC3';\n this.UTF8 = 'utf-8';\n this.SCHEME_ID_URI = 'schemeIdUri';\n this.START_TIME = 'starttime';\n this.SERVICE_DESCRIPTION_DVB_LL_SCHEME = 'urn:dvb:dash:lowlatency:scope:2019';\n this.SUPPLEMENTAL_PROPERTY_DVB_LL_SCHEME = 'urn:dvb:dash:lowlatency:critical:2019';\n this.FONT_DOWNLOAD_DVB_SCHEME = 'urn:dvb:dash:fontdownload:2014';\n this.XML = 'XML';\n this.ARRAY_BUFFER = 'ArrayBuffer';\n this.DVB_REPORTING_URL = 'dvb:reportingUrl';\n this.DVB_PROBABILITY = 'dvb:probability';\n this.OFF_MIMETYPE = 'application/font-sfnt';\n this.WOFF_MIMETYPE = 'application/font-woff';\n this.VIDEO_ELEMENT_READY_STATES = {\n HAVE_NOTHING: 0,\n HAVE_METADATA: 1,\n HAVE_CURRENT_DATA: 2,\n HAVE_FUTURE_DATA: 3,\n HAVE_ENOUGH_DATA: 4\n };\n this.FILE_LOADER_TYPES = {\n FETCH: 'fetch_loader',\n XHR: 'xhr_loader'\n }\n }\n\n constructor() {\n this.init();\n }\n}\n\nconst constants = new Constants();\nexport default constants;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Protection Constants declaration\n * @class\n * @ignore\n */\nclass ProtectionConstants {\n\n init () {\n this.CLEARKEY_KEYSTEM_STRING = 'org.w3.clearkey';\n this.WIDEVINE_KEYSTEM_STRING = 'com.widevine.alpha';\n this.PLAYREADY_KEYSTEM_STRING = 'com.microsoft.playready';\n this.PLAYREADY_RECOMMENDATION_KEYSTEM_STRING = 'com.microsoft.playready.recommendation';\n this.INITIALIZATION_DATA_TYPE_CENC = 'cenc';\n this.INITIALIZATION_DATA_TYPE_KEYIDS = 'keyids'\n this.INITIALIZATION_DATA_TYPE_WEBM = 'webm'\n }\n\n constructor () {\n this.init();\n }\n}\n\nlet constants = new ProtectionConstants();\nexport default constants;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst LICENSE_SERVER_MANIFEST_CONFIGURATIONS = {\n attributes: ['Laurl', 'laurl'],\n prefixes: ['clearkey', 'dashif']\n};\n\n/**\n * @class\n * @ignore\n */\nclass CommonEncryption {\n /**\n * Find and return the ContentProtection element in the given array\n * that indicates support for MPEG Common Encryption\n *\n * @param {Array} cpArray array of content protection elements\n * @returns {Object|null} the Common Encryption content protection element or\n * null if one was not found\n */\n static findCencContentProtection(cpArray) {\n let retVal = null;\n for (let i = 0; i < cpArray.length; ++i) {\n let cp = cpArray[i];\n if (cp.schemeIdUri.toLowerCase() === 'urn:mpeg:dash:mp4protection:2011' &&\n (cp.value.toLowerCase() === 'cenc' || cp.value.toLowerCase() === 'cbcs'))\n retVal = cp;\n }\n return retVal;\n }\n\n /**\n * Returns just the data portion of a single PSSH\n *\n * @param {ArrayBuffer} pssh - the PSSH\n * @return {ArrayBuffer} data portion of the PSSH\n */\n static getPSSHData(pssh) {\n let offset = 8; // Box size and type fields\n let view = new DataView(pssh);\n\n // Read version\n let version = view.getUint8(offset);\n\n offset += 20; // Version (1), flags (3), system ID (16)\n\n if (version > 0) {\n offset += 4 + (16 * view.getUint32(offset)); // Key ID count (4) and All key IDs (16*count)\n }\n\n offset += 4; // Data size\n return pssh.slice(offset);\n }\n\n /**\n * Returns the PSSH associated with the given key system from the concatenated\n * list of PSSH boxes in the given initData\n *\n * @param {KeySystem} keySystem the desired\n * key system\n * @param {ArrayBuffer} initData 'cenc' initialization data. Concatenated list of PSSH.\n * @returns {ArrayBuffer|null} The PSSH box data corresponding to the given key system, null if not found\n * or null if a valid association could not be found.\n */\n static getPSSHForKeySystem(keySystem, initData) {\n let psshList = CommonEncryption.parsePSSHList(initData);\n if (keySystem && psshList.hasOwnProperty(keySystem.uuid.toLowerCase())) {\n return psshList[keySystem.uuid.toLowerCase()];\n }\n return null;\n }\n\n /**\n * Parse a standard common encryption PSSH which contains a simple\n * base64-encoding of the init data\n *\n * @param {Object} cpData the ContentProtection element\n * @param {BASE64} BASE64 reference\n * @returns {ArrayBuffer|null} the init data or null if not found\n */\n static parseInitDataFromContentProtection(cpData, BASE64) {\n if ('pssh' in cpData) {\n\n // Remove whitespaces and newlines from pssh text\n cpData.pssh.__text = cpData.pssh.__text.replace(/\\r?\\n|\\r/g, '').replace(/\\s+/g, '');\n\n return BASE64.decodeArray(cpData.pssh.__text).buffer;\n }\n return null;\n }\n\n /**\n * Parses list of PSSH boxes into keysystem-specific PSSH data\n *\n * @param {ArrayBuffer} data - the concatenated list of PSSH boxes as provided by\n * CDM as initialization data when CommonEncryption content is detected\n * @returns {Object|Array} an object that has a property named according to each of\n * the detected key system UUIDs (e.g. 00000000-0000-0000-0000-0000000000)\n * and a ArrayBuffer (the entire PSSH box) as the property value\n */\n static parsePSSHList(data) {\n\n if (data === null || data === undefined)\n return [];\n\n let dv = new DataView(data.buffer || data); // data.buffer first for Uint8Array support\n let done = false;\n let pssh = {};\n\n // TODO: Need to check every data read for end of buffer\n let byteCursor = 0;\n while (!done) {\n\n let size,\n nextBox,\n version,\n systemID;\n let boxStart = byteCursor;\n\n if (byteCursor >= dv.buffer.byteLength)\n break;\n\n /* Box size */\n size = dv.getUint32(byteCursor);\n nextBox = byteCursor + size;\n byteCursor += 4;\n\n /* Verify PSSH */\n if (dv.getUint32(byteCursor) !== 0x70737368) {\n byteCursor = nextBox;\n continue;\n }\n byteCursor += 4;\n\n /* Version must be 0 or 1 */\n version = dv.getUint8(byteCursor);\n if (version !== 0 && version !== 1) {\n byteCursor = nextBox;\n continue;\n }\n byteCursor++;\n\n byteCursor += 3; /* skip flags */\n\n // 16-byte UUID/SystemID\n systemID = '';\n let i, val;\n for (i = 0; i < 4; i++) {\n val = dv.getUint8(byteCursor + i).toString(16);\n systemID += (val.length === 1) ? '0' + val : val;\n }\n byteCursor += 4;\n systemID += '-';\n for (i = 0; i < 2; i++) {\n val = dv.getUint8(byteCursor + i).toString(16);\n systemID += (val.length === 1) ? '0' + val : val;\n }\n byteCursor += 2;\n systemID += '-';\n for (i = 0; i < 2; i++) {\n val = dv.getUint8(byteCursor + i).toString(16);\n systemID += (val.length === 1) ? '0' + val : val;\n }\n byteCursor += 2;\n systemID += '-';\n for (i = 0; i < 2; i++) {\n val = dv.getUint8(byteCursor + i).toString(16);\n systemID += (val.length === 1) ? '0' + val : val;\n }\n byteCursor += 2;\n systemID += '-';\n for (i = 0; i < 6; i++) {\n val = dv.getUint8(byteCursor + i).toString(16);\n systemID += (val.length === 1) ? '0' + val : val;\n }\n byteCursor += 6;\n\n systemID = systemID.toLowerCase();\n\n /* PSSH Data Size */\n byteCursor += 4;\n\n /* PSSH Data */\n pssh[systemID] = dv.buffer.slice(boxStart, nextBox);\n byteCursor = nextBox;\n }\n\n return pssh;\n }\n\n static getLicenseServerUrlFromMediaInfo(mediaInfo, schemeIdUri) {\n try {\n\n if (!mediaInfo || mediaInfo.length === 0) {\n return null;\n }\n\n let i = 0;\n let licenseServer = null;\n\n while (i < mediaInfo.length && !licenseServer) {\n const info = mediaInfo[i];\n\n if (info && info.contentProtection && info.contentProtection.length > 0) {\n const targetProtectionData = info.contentProtection.filter((cp) => {\n return cp.schemeIdUri && cp.schemeIdUri === schemeIdUri;\n });\n\n if (targetProtectionData && targetProtectionData.length > 0) {\n let j = 0;\n while (j < targetProtectionData.length && !licenseServer) {\n const ckData = targetProtectionData[j];\n let k = 0;\n while (k < LICENSE_SERVER_MANIFEST_CONFIGURATIONS.attributes.length && !licenseServer) {\n let l = 0;\n const attribute = LICENSE_SERVER_MANIFEST_CONFIGURATIONS.attributes[k];\n while (l < LICENSE_SERVER_MANIFEST_CONFIGURATIONS.prefixes.length && !licenseServer) {\n const prefix = LICENSE_SERVER_MANIFEST_CONFIGURATIONS.prefixes[l];\n if (ckData[attribute] && ckData[attribute].__prefix && ckData[attribute].__prefix === prefix && ckData[attribute].__text) {\n licenseServer = ckData[attribute].__text;\n }\n l += 1;\n }\n k += 1;\n }\n j += 1;\n }\n }\n }\n i += 1;\n }\n return licenseServer;\n } catch (e) {\n return null;\n }\n }\n}\n\nexport default CommonEncryption;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport EventsBase from '../../core/events/EventsBase';\n\n/**\n * @class\n */\nclass ProtectionEvents extends EventsBase {\n /**\n * @description Public facing external events to be used when including protection package.\n * All public events will be aggregated into the MediaPlayerEvents Class and can be accessed\n * via MediaPlayer.events. public_ is the prefix that we use to move event names to MediaPlayerEvents.\n */\n constructor() {\n super();\n\n /**\n * Event ID for events delivered when the protection set receives\n * a key message from the CDM\n *\n * @ignore\n */\n this.INTERNAL_KEY_MESSAGE = 'internalKeyMessage';\n\n /**\n * Event ID for events delivered when the status of one decryption keys has changed\n * @ignore\n */\n this.INTERNAL_KEY_STATUS_CHANGED = 'internalkeyStatusChanged';\n\n /**\n * Event ID for events delivered when a new key has been added\n *\n * @constant\n * @deprecated The latest versions of the EME specification no longer\n * use this event. {@MediaPlayer.models.protectionModel.eventList.KEY_STATUSES_CHANGED}\n * is preferred.\n * @event ProtectionEvents#KEY_ADDED\n */\n this.KEY_ADDED = 'public_keyAdded';\n /**\n * Event ID for events delivered when an error is encountered by the CDM\n * while processing a license server response message\n * @event ProtectionEvents#KEY_ERROR\n */\n this.KEY_ERROR = 'public_keyError';\n\n /**\n * Event ID for events delivered when the protection set receives\n * a key message from the CDM\n * @event ProtectionEvents#KEY_MESSAGE\n */\n this.KEY_MESSAGE = 'public_keyMessage';\n\n /**\n * Event ID for events delivered when a key session close\n * process has completed\n * @event ProtectionEvents#KEY_SESSION_CLOSED\n */\n this.KEY_SESSION_CLOSED = 'public_keySessionClosed';\n\n /**\n * Event ID for events delivered when a new key sessions creation\n * process has completed\n * @event ProtectionEvents#KEY_SESSION_CREATED\n */\n this.KEY_SESSION_CREATED = 'public_keySessionCreated';\n\n /**\n * Event ID for events delivered when a key session removal\n * process has completed\n * @event ProtectionEvents#KEY_SESSION_REMOVED\n */\n this.KEY_SESSION_REMOVED = 'public_keySessionRemoved';\n\n /**\n * Event ID for events delivered when the status of one or more\n * decryption keys has changed\n * @event ProtectionEvents#KEY_STATUSES_CHANGED\n */\n this.KEY_STATUSES_CHANGED = 'public_keyStatusesChanged';\n\n /**\n * Event ID for events delivered when a key system access procedure\n * has completed\n * @event ProtectionEvents#KEY_SYSTEM_ACCESS_COMPLETE\n */\n this.KEY_SYSTEM_ACCESS_COMPLETE = 'public_keySystemAccessComplete';\n\n /**\n * Event ID for events delivered when a key system selection procedure\n * completes\n * @event ProtectionEvents#KEY_SYSTEM_SELECTED\n */\n this.KEY_SYSTEM_SELECTED = 'public_keySystemSelected';\n\n /**\n * Event ID for events delivered when a license request procedure\n * has completed\n * @event ProtectionEvents#LICENSE_REQUEST_COMPLETE\n */\n this.LICENSE_REQUEST_COMPLETE = 'public_licenseRequestComplete';\n\n /**\n * Sending a license rquest\n * @event ProtectionEvents#LICENSE_REQUEST_SENDING\n */\n this.LICENSE_REQUEST_SENDING = 'public_licenseRequestSending';\n\n /**\n * Event ID for needkey/encrypted events\n * @ignore\n */\n this.NEED_KEY = 'needkey';\n\n /**\n * Event ID for events delivered when the Protection system is detected and created.\n * @event ProtectionEvents#PROTECTION_CREATED\n */\n this.PROTECTION_CREATED = 'public_protectioncreated';\n\n /**\n * Event ID for events delivered when the Protection system is destroyed.\n * @event ProtectionEvents#PROTECTION_DESTROYED\n */\n this.PROTECTION_DESTROYED = 'public_protectiondestroyed';\n\n /**\n * Event ID for events delivered when a new server certificate has\n * been delivered to the CDM\n * @ignore\n */\n this.SERVER_CERTIFICATE_UPDATED = 'serverCertificateUpdated';\n\n /**\n * Event ID for events delivered when the process of shutting down\n * a protection set has completed\n * @ignore\n */\n this.TEARDOWN_COMPLETE = 'protectionTeardownComplete';\n\n /**\n * Event ID for events delivered when a HTMLMediaElement has been\n * associated with the protection set\n * @ignore\n */\n this.VIDEO_ELEMENT_SELECTED = 'videoElementSelected';\n\n /**\n * Triggered when the key session has been updated successfully\n * @ignore\n */\n this.KEY_SESSION_UPDATED = 'public_keySessionUpdated';\n }\n}\n\nlet protectionEvents = new ProtectionEvents();\nexport default protectionEvents;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport CommonEncryption from '../CommonEncryption';\nimport MediaCapability from '../vo/MediaCapability';\nimport KeySystemConfiguration from '../vo/KeySystemConfiguration';\nimport ProtectionErrors from '../errors/ProtectionErrors';\nimport DashJSError from '../../vo/DashJSError';\nimport LicenseRequest from '../vo/LicenseRequest';\nimport LicenseResponse from '../vo/LicenseResponse';\nimport {HTTPRequest} from '../../vo/metrics/HTTPRequest';\nimport Utils from '../../../core/Utils';\nimport Constants from '../../constants/Constants';\nimport FactoryMaker from '../../../core/FactoryMaker';\n\nconst NEEDKEY_BEFORE_INITIALIZE_RETRIES = 5;\nconst NEEDKEY_BEFORE_INITIALIZE_TIMEOUT = 500;\n\nconst LICENSE_SERVER_REQUEST_RETRIES = 3;\nconst LICENSE_SERVER_REQUEST_RETRY_INTERVAL = 1000;\nconst LICENSE_SERVER_REQUEST_DEFAULT_TIMEOUT = 8000;\n\n/**\n * @module ProtectionController\n * @description Provides access to media protection information and functionality. Each\n * ProtectionController manages a single {@link MediaPlayer.models.ProtectionModel}\n * which encapsulates a set of protection information (EME APIs, selected key system,\n * key sessions). The APIs of ProtectionController mostly align with the latest EME\n * APIs. Key system selection is mostly automated when combined with app-overrideable\n * functionality provided in {@link ProtectionKeyController}.\n * @todo ProtectionController does almost all of its tasks automatically after init() is\n * called. Applications might want more control over this process and want to go through\n * each step manually (key system selection, session creation, session maintenance).\n * This module can be accessed using the MediaPlayer API getProtectionController()\n * @param {Object} config\n */\n\nfunction ProtectionController(config) {\n\n config = config || {};\n const protectionKeyController = config.protectionKeyController;\n let protectionModel = config.protectionModel;\n const eventBus = config.eventBus;\n const events = config.events;\n const debug = config.debug;\n const BASE64 = config.BASE64;\n const constants = config.constants;\n let needkeyRetries = [];\n const cmcdModel = config.cmcdModel;\n const settings = config.settings;\n const customParametersModel = config.customParametersModel;\n\n let instance,\n logger,\n pendingKeySessionsToHandle,\n mediaInfoArr,\n protDataSet,\n sessionType,\n robustnessLevel,\n selectedKeySystem,\n keySystemSelectionInProgress,\n licenseXhrRequest,\n licenseRequestRetryTimeout;\n\n function setup() {\n logger = debug.getLogger(instance);\n pendingKeySessionsToHandle = [];\n mediaInfoArr = [];\n sessionType = 'temporary';\n robustnessLevel = '';\n licenseXhrRequest = null;\n licenseRequestRetryTimeout = null;\n eventBus.on(events.INTERNAL_KEY_MESSAGE, _onKeyMessage, instance);\n eventBus.on(events.INTERNAL_KEY_STATUS_CHANGED, _onKeyStatusChanged, instance);\n }\n\n function checkConfig() {\n if (!eventBus || !eventBus.hasOwnProperty('on') || !protectionKeyController || !protectionKeyController.hasOwnProperty('getSupportedKeySystemsFromContentProtection')) {\n throw new Error('Missing config parameter(s)');\n }\n }\n\n /**\n * Initialize this protection system for a given media type.\n *\n * @param {StreamInfo} [mediaInfo] Media information\n * @memberof module:ProtectionController\n * @instance\n */\n function initializeForMedia(mediaInfo) {\n // Not checking here if a session for similar KS/KID combination is already created\n // because still don't know which keysystem will be selected.\n // Once Keysystem is selected and before creating the session, we will do that check\n // so we create the strictly necessary DRM sessions\n if (!mediaInfo) {\n throw new Error('mediaInfo can not be null or undefined');\n }\n\n checkConfig();\n\n mediaInfoArr.push(mediaInfo);\n }\n\n /**\n * Once all mediaInfo objects have been added to our mediaInfoArray we can select a key system or check if the kid has changed and we need to trigger a new license request\n * @memberof module:ProtectionController\n * @instance\n */\n function handleKeySystemFromManifest() {\n if (!mediaInfoArr || mediaInfoArr.length === 0) {\n return;\n }\n\n let supportedKeySystems = [];\n mediaInfoArr.forEach((mInfo) => {\n const currentKs = protectionKeyController.getSupportedKeySystemsFromContentProtection(mInfo.contentProtection, protDataSet, sessionType);\n // We assume that the same key systems are signaled for each AS. We can use the first entry we found\n if (currentKs.length > 0) {\n if (supportedKeySystems.length === 0) {\n supportedKeySystems = currentKs;\n }\n // Save config for creating key session once we selected a key system\n pendingKeySessionsToHandle.push(currentKs);\n }\n })\n\n if (supportedKeySystems && supportedKeySystems.length > 0) {\n _selectKeySystemOrUpdateKeySessions(supportedKeySystems, true);\n }\n }\n\n /**\n * Selects a key system if we dont have any one yet. Otherwise we use the existing key system and trigger a new license request if the initdata has changed\n * @param {array} supportedKs\n * @private\n */\n function _handleKeySystemFromPssh(supportedKs) {\n pendingKeySessionsToHandle.push(supportedKs);\n _selectKeySystemOrUpdateKeySessions(supportedKs, false);\n }\n\n /**\n * Select the key system or update one of our existing key sessions\n * @param {array} supportedKs\n * @param {boolean} fromManifest\n * @private\n */\n function _selectKeySystemOrUpdateKeySessions(supportedKs, fromManifest) {\n // First time, so we need to select a key system\n if (!selectedKeySystem && !keySystemSelectionInProgress) {\n _selectInitialKeySystem(supportedKs, fromManifest);\n }\n\n // We already selected a key system. We only need to trigger a new license exchange if the init data has changed\n else if (selectedKeySystem) {\n _handleKeySessions();\n }\n }\n\n /**\n * We do not have a key system yet. Select one\n * @param {array} supportedKs\n * @param {boolean} fromManifest\n * @private\n */\n function _selectInitialKeySystem(supportedKs, fromManifest) {\n if (!keySystemSelectionInProgress) {\n keySystemSelectionInProgress = true;\n const requestedKeySystems = [];\n\n // Reorder key systems according to priority order provided in protectionData\n supportedKs = supportedKs.sort((ksA, ksB) => {\n let indexA = (protDataSet && protDataSet[ksA.ks.systemString] && protDataSet[ksA.ks.systemString].priority >= 0) ? protDataSet[ksA.ks.systemString].priority : supportedKs.length;\n let indexB = (protDataSet && protDataSet[ksB.ks.systemString] && protDataSet[ksB.ks.systemString].priority >= 0) ? protDataSet[ksB.ks.systemString].priority : supportedKs.length;\n return indexA - indexB;\n });\n\n // Add all key systems to our request list since we have yet to select a key system\n for (let i = 0; i < supportedKs.length; i++) {\n const keySystemConfiguration = _getKeySystemConfiguration(supportedKs[i]);\n requestedKeySystems.push({\n ks: supportedKs[i].ks,\n configs: [keySystemConfiguration],\n protData: supportedKs[i].protData\n });\n }\n\n let keySystemAccess;\n\n protectionModel.requestKeySystemAccess(requestedKeySystems)\n .then((event) => {\n keySystemAccess = event.data;\n let selectedSystemString = keySystemAccess.mksa && keySystemAccess.mksa.selectedSystemString ? keySystemAccess.mksa.selectedSystemString : keySystemAccess.keySystem.systemString;\n logger.info('DRM: KeySystem Access Granted for system string (' + selectedSystemString + ')! Selecting key system...');\n return protectionModel.selectKeySystem(keySystemAccess);\n })\n .then((keySystem) => {\n selectedKeySystem = keySystem;\n keySystemSelectionInProgress = false;\n\n if (!protectionModel) {\n return;\n }\n\n eventBus.trigger(events.KEY_SYSTEM_SELECTED, { data: keySystemAccess });\n\n // Set server certificate from protData\n const protData = _getProtDataForKeySystem(selectedKeySystem);\n if (protData && protData.serverCertificate && protData.serverCertificate.length > 0) {\n protectionModel.setServerCertificate(BASE64.decodeArray(protData.serverCertificate).buffer);\n }\n\n _handleKeySessions();\n })\n .catch((event) => {\n selectedKeySystem = null;\n keySystemSelectionInProgress = false;\n if (!fromManifest) {\n eventBus.trigger(events.KEY_SYSTEM_SELECTED, {\n data: null,\n error: new DashJSError(ProtectionErrors.KEY_SYSTEM_ACCESS_DENIED_ERROR_CODE, ProtectionErrors.KEY_SYSTEM_ACCESS_DENIED_ERROR_MESSAGE + 'Error selecting key system! -- ' + event.error)\n });\n }\n })\n }\n }\n\n /**\n * If we have already selected a key system we only need to create a new key session and issue a new license request if the init data has changed.\n * @private\n */\n function _handleKeySessions() {\n // Create key sessions for the different AdaptationSets\n let ksIdx;\n for (let i = 0; i < pendingKeySessionsToHandle.length; i++) {\n for (ksIdx = 0; ksIdx < pendingKeySessionsToHandle[i].length; ksIdx++) {\n if (selectedKeySystem === pendingKeySessionsToHandle[i][ksIdx].ks) {\n const current = pendingKeySessionsToHandle[i][ksIdx]\n _loadOrCreateKeySession(current)\n break;\n }\n }\n }\n pendingKeySessionsToHandle = [];\n }\n\n /**\n * Loads an existing key session if we already have a session id. Otherwise we create a new key session\n * @param {object} keySystemInfo\n * @private\n */\n function _loadOrCreateKeySession(keySystemInfo) {\n // Clearkey\n if (protectionKeyController.isClearKey(selectedKeySystem)) {\n // For Clearkey: if parameters for generating init data was provided by the user, use them for generating\n // initData and overwrite possible initData indicated in encrypted event (EME)\n if (keySystemInfo.protData && keySystemInfo.protData.hasOwnProperty('clearkeys') && Object.keys(keySystemInfo.protData.clearkeys).length !== 0) {\n const initData = { kids: Object.keys(keySystemInfo.protData.clearkeys) };\n keySystemInfo.initData = new TextEncoder().encode(JSON.stringify(initData));\n }\n }\n\n // Reuse existing KeySession\n if (keySystemInfo.sessionId) {\n // Load MediaKeySession with sessionId\n loadKeySession(keySystemInfo);\n }\n\n // Create a new KeySession\n else if (keySystemInfo.initData !== null) {\n // Create new MediaKeySession with initData\n createKeySession(keySystemInfo);\n }\n }\n\n /**\n * Loads a key session with the given session ID from persistent storage. This essentially creates a new key session\n *\n * @param {object} ksInfo\n * @memberof module:ProtectionController\n * @instance\n * @fires ProtectionController#KeySessionCreated\n * @ignore\n */\n function loadKeySession(keySystemInfo) {\n checkConfig();\n protectionModel.loadKeySession(keySystemInfo);\n }\n\n /**\n * Create a new key session associated with the given initialization data from the MPD or from the PSSH box in the media\n * For the latest version of the EME a request is generated. Once this request is ready we get notified via the INTERNAL_KEY_MESSAGE event\n * @param {ArrayBuffer} initData the initialization data\n * @param {Uint8Array} cdmData the custom data to provide to licenser\n * @memberof module:ProtectionController\n * @instance\n * @fires ProtectionController#KeySessionCreated\n * @ignore\n */\n function createKeySession(keySystemInfo) {\n const initDataForKS = CommonEncryption.getPSSHForKeySystem(selectedKeySystem, keySystemInfo ? keySystemInfo.initData : null);\n\n if (initDataForKS) {\n\n // Check for duplicate key id\n if (_isKeyIdDuplicate(keySystemInfo.keyId)) {\n return;\n }\n\n // Check for duplicate initData\n if (_isInitDataDuplicate(initDataForKS)) {\n return;\n }\n\n try {\n keySystemInfo.initData = initDataForKS;\n protectionModel.createKeySession(keySystemInfo);\n } catch (error) {\n eventBus.trigger(events.KEY_SESSION_CREATED, {\n data: null,\n error: new DashJSError(ProtectionErrors.KEY_SESSION_CREATED_ERROR_CODE, ProtectionErrors.KEY_SESSION_CREATED_ERROR_MESSAGE + error.message)\n });\n }\n } else if (keySystemInfo && keySystemInfo.initData) {\n protectionModel.createKeySession(keySystemInfo);\n } else {\n eventBus.trigger(events.KEY_SESSION_CREATED, {\n data: null,\n error: new DashJSError(ProtectionErrors.KEY_SESSION_CREATED_ERROR_CODE, ProtectionErrors.KEY_SESSION_CREATED_ERROR_MESSAGE + 'Selected key system is ' + (selectedKeySystem ? selectedKeySystem.systemString : null) + '. needkey/encrypted event contains no initData corresponding to that key system!')\n });\n }\n }\n\n /**\n * Returns the protectionData for a specific keysystem as specified by the application.\n * @param {object} keySystem\n * @return {object | null}\n * @private\n */\n function _getProtDataForKeySystem(keySystem) {\n if (keySystem) {\n const keySystemString = keySystem.systemString;\n\n if (protDataSet) {\n return (keySystemString in protDataSet) ? protDataSet[keySystemString] : null;\n }\n }\n return null;\n }\n\n /**\n * Removes all entries from the mediaInfoArr\n */\n function clearMediaInfoArray() {\n mediaInfoArr = [];\n }\n\n /**\n * Returns a set of supported key systems and CENC initialization data\n * from the given array of ContentProtection elements. Only\n * key systems that are supported by this player will be returned.\n * Key systems are returned in priority order (highest first).\n *\n * @param {Array.<Object>} cps - array of content protection elements parsed\n * from the manifest\n * @returns {Array.<Object>} array of objects indicating which supported key\n * systems were found. Empty array is returned if no\n * supported key systems were found\n * @memberof module:ProtectionKeyController\n * @instance\n * @ignore\n */\n function getSupportedKeySystemsFromContentProtection(cps) {\n checkConfig();\n return protectionKeyController.getSupportedKeySystemsFromContentProtection(cps, protDataSet, sessionType);\n }\n\n /**\n * Checks if a session has already created for the provided key id\n * @param {string} keyId\n * @return {boolean}\n * @private\n */\n function _isKeyIdDuplicate(keyId) {\n\n if (!keyId) {\n return false;\n }\n\n try {\n const sessions = protectionModel.getSessions();\n for (let i = 0; i < sessions.length; i++) {\n if (sessions[i].getKeyId() === keyId) {\n return true;\n }\n }\n return false;\n } catch (e) {\n return false;\n }\n }\n\n /**\n * Checks if the provided init data is equal to one of the existing init data values\n * @param {any} initDataForKS\n * @return {boolean}\n * @private\n */\n function _isInitDataDuplicate(initDataForKS) {\n\n if (!initDataForKS) {\n return false;\n }\n\n try {\n const currentInitData = protectionModel.getAllInitData();\n for (let i = 0; i < currentInitData.length; i++) {\n if (protectionKeyController.initDataEquals(initDataForKS, currentInitData[i])) {\n logger.debug('DRM: Ignoring initData because we have already seen it!');\n return true;\n }\n }\n\n return false;\n } catch (e) {\n return false;\n }\n }\n\n /**\n * Removes the given key session from persistent storage and closes the session\n * as if {@link ProtectionController#closeKeySession}\n * was called\n *\n * @param {SessionToken} sessionToken the session\n * token\n * @memberof module:ProtectionController\n * @instance\n * @fires ProtectionController#KeySessionRemoved\n * @fires ProtectionController#KeySessionClosed\n * @ignore\n */\n function removeKeySession(sessionToken) {\n checkConfig();\n protectionModel.removeKeySession(sessionToken);\n }\n\n /**\n * Closes the key session and releases all associated decryption keys. These\n * keys will no longer be available for decrypting media\n *\n * @param {SessionToken} sessionToken the session\n * token\n * @memberof module:ProtectionController\n * @instance\n * @fires ProtectionController#KeySessionClosed\n * @ignore\n */\n function closeKeySession(sessionToken) {\n checkConfig();\n protectionModel.closeKeySession(sessionToken);\n }\n\n /**\n * Sets a server certificate for use by the CDM when signing key messages\n * intended for a particular license server. This will fire\n * an error event if a key system has not yet been selected.\n *\n * @param {ArrayBuffer} serverCertificate a CDM-specific license server\n * certificate\n * @memberof module:ProtectionController\n * @instance\n * @fires ProtectionController#ServerCertificateUpdated\n */\n function setServerCertificate(serverCertificate) {\n checkConfig();\n protectionModel.setServerCertificate(serverCertificate);\n }\n\n /**\n * Associate this protection system with the given HTMLMediaElement. This\n * causes the system to register for needkey/encrypted events from the given\n * element and provides a destination for setting of MediaKeys\n *\n * @param {HTMLMediaElement} element the media element to which the protection\n * system should be associated\n * @memberof module:ProtectionController\n * @instance\n */\n function setMediaElement(element) {\n checkConfig();\n if (element) {\n protectionModel.setMediaElement(element);\n eventBus.on(events.NEED_KEY, _onNeedKey, instance);\n } else if (element === null) {\n protectionModel.setMediaElement(element);\n eventBus.off(events.NEED_KEY, _onNeedKey, instance);\n }\n }\n\n /**\n * Sets the session type to use when creating key sessions. Either \"temporary\" or\n * \"persistent-license\". Default is \"temporary\".\n *\n * @param {string} value the session type\n * @memberof module:ProtectionController\n * @instance\n */\n function setSessionType(value) {\n sessionType = value;\n }\n\n /**\n * Sets the robustness level for video and audio capabilities. Optional to remove Chrome warnings.\n * Possible values are SW_SECURE_CRYPTO, SW_SECURE_DECODE, HW_SECURE_CRYPTO, HW_SECURE_CRYPTO, HW_SECURE_DECODE, HW_SECURE_ALL.\n *\n * @param {string} level the robustness level\n * @memberof module:ProtectionController\n * @instance\n */\n function setRobustnessLevel(level) {\n robustnessLevel = level;\n }\n\n /**\n * Attach KeySystem-specific data to use for license acquisition with EME\n *\n * @param {Object} data an object containing property names corresponding to\n * key system name strings (e.g. \"org.w3.clearkey\") and associated values\n * being instances of {@link ProtectionData}\n * @memberof module:ProtectionController\n * @instance\n * @ignore\n */\n function setProtectionData(data) {\n protDataSet = data;\n protectionKeyController.setProtectionData(data);\n }\n\n /**\n * Stop method is called when current playback is stopped/resetted.\n *\n * @memberof module:ProtectionController\n * @instance\n */\n function stop() {\n _abortLicenseRequest();\n if (protectionModel) {\n protectionModel.stop();\n }\n }\n\n /**\n * Destroys all protection data associated with this protection set. This includes\n * deleting all key sessions. In the case of persistent key sessions, the sessions\n * will simply be unloaded and not deleted. Additionally, if this protection set is\n * associated with a HTMLMediaElement, it will be detached from that element.\n *\n * @memberof module:ProtectionController\n * @instance\n * @ignore\n */\n function reset() {\n eventBus.off(events.INTERNAL_KEY_MESSAGE, _onKeyMessage, instance);\n eventBus.off(events.INTERNAL_KEY_STATUS_CHANGED, _onKeyStatusChanged, instance);\n\n checkConfig();\n\n _abortLicenseRequest();\n\n setMediaElement(null);\n\n selectedKeySystem = null;\n keySystemSelectionInProgress = false;\n\n if (protectionModel) {\n protectionModel.reset();\n protectionModel = null;\n }\n\n needkeyRetries.forEach(retryTimeout => clearTimeout(retryTimeout));\n needkeyRetries = [];\n\n mediaInfoArr = [];\n pendingKeySessionsToHandle = [];\n }\n\n /**\n * Returns an object corresponding to the EME MediaKeySystemConfiguration dictionary\n * @param {object} keySystem\n * @return {KeySystemConfiguration}\n * @private\n */\n function _getKeySystemConfiguration(keySystemData) {\n const protData = keySystemData.protData;\n const audioCapabilities = [];\n const videoCapabilities = [];\n const audioRobustness = (protData && protData.audioRobustness && protData.audioRobustness.length > 0) ? protData.audioRobustness : robustnessLevel;\n const videoRobustness = (protData && protData.videoRobustness && protData.videoRobustness.length > 0) ? protData.videoRobustness : robustnessLevel;\n const ksSessionType = keySystemData.sessionType;\n const distinctiveIdentifier = (protData && protData.distinctiveIdentifier) ? protData.distinctiveIdentifier : 'optional';\n const persistentState = (protData && protData.persistentState) ? protData.persistentState : (ksSessionType === 'temporary') ? 'optional' : 'required';\n\n mediaInfoArr.forEach((media) => {\n if (media.type === constants.AUDIO) {\n audioCapabilities.push(new MediaCapability(media.codec, audioRobustness));\n } else if (media.type === constants.VIDEO) {\n videoCapabilities.push(new MediaCapability(media.codec, videoRobustness));\n }\n });\n\n return new KeySystemConfiguration(\n audioCapabilities, videoCapabilities, distinctiveIdentifier,\n persistentState,\n [ksSessionType]);\n }\n\n /**\n * Event handler for when the status of the key has changed\n * @param {object} e\n * @private\n */\n function _onKeyStatusChanged(e) {\n if (e.error) {\n eventBus.trigger(events.KEY_STATUSES_CHANGED, { data: null, error: e.error });\n } else {\n logger.debug('DRM: key status = ' + e.status);\n }\n }\n\n /**\n * Event handler for the key message event. Once we have a key message we can issue a license request\n * @param {object} e\n * @private\n */\n function _onKeyMessage(e) {\n logger.debug('DRM: onKeyMessage');\n\n // Dispatch event to applications indicating we received a key message\n const keyMessage = e.data;\n eventBus.trigger(events.KEY_MESSAGE, { data: keyMessage });\n const messageType = (keyMessage.messageType) ? keyMessage.messageType : 'license-request';\n const message = keyMessage.message;\n const sessionToken = keyMessage.sessionToken;\n const protData = _getProtDataForKeySystem(selectedKeySystem);\n const licenseServerModelInstance = protectionKeyController.getLicenseServerModelInstance(selectedKeySystem, protData, messageType);\n const eventData = { sessionToken: sessionToken, messageType: messageType };\n\n // Ensure message from CDM is not empty\n if (!message || message.byteLength === 0) {\n _sendLicenseRequestCompleteEvent(eventData, new DashJSError(ProtectionErrors.MEDIA_KEY_MESSAGE_NO_CHALLENGE_ERROR_CODE, ProtectionErrors.MEDIA_KEY_MESSAGE_NO_CHALLENGE_ERROR_MESSAGE));\n return;\n }\n\n // Message not destined for license server\n if (!licenseServerModelInstance) {\n logger.debug('DRM: License server request not required for this message (type = ' + e.data.messageType + '). Session ID = ' + sessionToken.getSessionId());\n _sendLicenseRequestCompleteEvent(eventData);\n return;\n }\n\n // Perform any special handling for ClearKey\n if (protectionKeyController.isClearKey(selectedKeySystem)) {\n const clearkeys = protectionKeyController.processClearKeyLicenseRequest(selectedKeySystem, protData, message);\n if (clearkeys && clearkeys.keyPairs && clearkeys.keyPairs.length > 0) {\n logger.debug('DRM: ClearKey license request handled by application!');\n _sendLicenseRequestCompleteEvent(eventData);\n protectionModel.updateKeySession(sessionToken, clearkeys);\n return;\n }\n }\n\n // In all other cases we have to make a license request\n _issueLicenseRequest(keyMessage, licenseServerModelInstance, protData);\n }\n\n /**\n * Notify other classes that the license request was completed\n * @param {object} data\n * @param {object} error\n * @private\n */\n function _sendLicenseRequestCompleteEvent(data, error) {\n eventBus.trigger(events.LICENSE_REQUEST_COMPLETE, { data: data, error: error });\n }\n\n /**\n * Start issuing a license request\n * @param {object} keyMessage\n * @param {object} licenseServerData\n * @param {object} protData\n * @private\n */\n function _issueLicenseRequest(keyMessage, licenseServerData, protData) {\n const sessionToken = keyMessage.sessionToken;\n const messageType = (keyMessage.messageType) ? keyMessage.messageType : 'license-request';\n const eventData = { sessionToken: sessionToken, messageType: messageType };\n const keySystemString = selectedKeySystem ? selectedKeySystem.systemString : null;\n\n // Determine license server URL\n let url = _getLicenseServerUrl(protData, messageType, sessionToken, keyMessage, licenseServerData);\n\n // Ensure valid license server URL\n if (!url) {\n _sendLicenseRequestCompleteEvent(eventData, new DashJSError(ProtectionErrors.MEDIA_KEY_MESSAGE_NO_LICENSE_SERVER_URL_ERROR_CODE, ProtectionErrors.MEDIA_KEY_MESSAGE_NO_LICENSE_SERVER_URL_ERROR_MESSAGE));\n return;\n }\n\n // Set optional XMLHttpRequest headers from protection data and message\n const reqHeaders = {};\n let withCredentials = false;\n if (protData) {\n _updateHeaders(reqHeaders, protData.httpRequestHeaders);\n }\n const message = keyMessage.message;\n const headersFromMessage = selectedKeySystem.getRequestHeadersFromMessage(message);\n _updateHeaders(reqHeaders, headersFromMessage);\n\n Object.keys(reqHeaders).forEach((key) => {\n if ('authorization' === key.toLowerCase()) {\n withCredentials = true;\n }\n });\n\n // Overwrite withCredentials property from protData if present\n if (protData && typeof protData.withCredentials == 'boolean') {\n withCredentials = protData.withCredentials;\n }\n\n const onLoad = function (xhr) {\n if (!protectionModel) {\n return;\n }\n\n if (xhr.status >= 200 && xhr.status <= 299) {\n const responseHeaders = Utils.parseHttpHeaders(xhr.getAllResponseHeaders ? xhr.getAllResponseHeaders() : null);\n let licenseResponse = new LicenseResponse(xhr.responseURL, responseHeaders, xhr.response);\n const licenseResponseFilters = customParametersModel.getLicenseResponseFilters();\n _applyFilters(licenseResponseFilters, licenseResponse)\n .then(() => {\n const licenseMessage = licenseServerData.getLicenseMessage(licenseResponse.data, keySystemString, messageType);\n if (licenseMessage !== null) {\n _sendLicenseRequestCompleteEvent(eventData);\n protectionModel.updateKeySession(sessionToken, licenseMessage);\n } else {\n _reportError(xhr, eventData, keySystemString, messageType, licenseServerData);\n }\n });\n } else {\n _reportError(xhr, eventData, keySystemString, messageType, licenseServerData);\n }\n };\n\n const onAbort = function (xhr) {\n _sendLicenseRequestCompleteEvent(eventData, new DashJSError(ProtectionErrors.MEDIA_KEY_MESSAGE_LICENSER_ERROR_CODE,\n ProtectionErrors.MEDIA_KEY_MESSAGE_LICENSER_ERROR_MESSAGE + keySystemString + ' update, XHR aborted. status is \"' +\n xhr.statusText + '\" (' + xhr.status + '), readyState is ' + xhr.readyState));\n };\n\n const onError = function (xhr) {\n _sendLicenseRequestCompleteEvent(eventData, new DashJSError(ProtectionErrors.MEDIA_KEY_MESSAGE_LICENSER_ERROR_CODE,\n ProtectionErrors.MEDIA_KEY_MESSAGE_LICENSER_ERROR_MESSAGE + keySystemString + ' update, XHR error. status is \"' +\n xhr.statusText + '\" (' + xhr.status + '), readyState is ' + xhr.readyState));\n };\n\n const reqPayload = selectedKeySystem.getLicenseRequestFromMessage(message);\n const reqMethod = licenseServerData.getHTTPMethod(messageType);\n const responseType = licenseServerData.getResponseType(keySystemString, messageType);\n const timeout = protData && !isNaN(protData.httpTimeout) ? protData.httpTimeout : LICENSE_SERVER_REQUEST_DEFAULT_TIMEOUT;\n const sessionId = sessionToken.getSessionId() || null;\n\n let licenseRequest = new LicenseRequest(url, reqMethod, responseType, reqHeaders, withCredentials, messageType, sessionId, reqPayload);\n const retryAttempts = !isNaN(settings.get().streaming.retryAttempts[HTTPRequest.LICENSE]) ? settings.get().streaming.retryAttempts[HTTPRequest.LICENSE] : LICENSE_SERVER_REQUEST_RETRIES;\n const licenseRequestFilters = customParametersModel.getLicenseRequestFilters();\n _applyFilters(licenseRequestFilters, licenseRequest)\n .then(() => {\n _doLicenseRequest(licenseRequest, retryAttempts, timeout, onLoad, onAbort, onError);\n });\n }\n\n /**\n * Implement license requests with a retry mechanism to avoid temporary network issues to affect playback experience\n * @param {object} request\n * @param {number} retriesCount\n * @param {number} timeout\n * @param {function} onLoad\n * @param {function} onAbort\n * @param {function} onError\n * @private\n */\n function _doLicenseRequest(request, retriesCount, timeout, onLoad, onAbort, onError) {\n const xhr = new XMLHttpRequest();\n\n if (settings.get().streaming.cmcd && settings.get().streaming.cmcd.enabled) {\n const cmcdMode = settings.get().streaming.cmcd.mode;\n if (cmcdMode === Constants.CMCD_MODE_QUERY) {\n const cmcdParams = cmcdModel.getQueryParameter({\n url: request.url,\n type: HTTPRequest.LICENSE\n });\n\n if (cmcdParams) {\n request.url = Utils.addAditionalQueryParameterToUrl(request.url, [cmcdParams]);\n }\n }\n }\n\n xhr.open(request.method, request.url, true);\n xhr.responseType = request.responseType;\n xhr.withCredentials = request.withCredentials;\n if (timeout > 0) {\n xhr.timeout = timeout;\n }\n for (const key in request.headers) {\n xhr.setRequestHeader(key, request.headers[key]);\n }\n\n if (settings.get().streaming.cmcd && settings.get().streaming.cmcd.enabled) {\n const cmcdMode = settings.get().streaming.cmcd.mode;\n if (cmcdMode === Constants.CMCD_MODE_HEADER) {\n const cmcdHeaders = cmcdModel.getHeaderParameters({\n url: request.url,\n type: HTTPRequest.LICENSE\n });\n\n if (cmcdHeaders) {\n for (const header in cmcdHeaders) {\n let value = cmcdHeaders[header];\n if (value) {\n xhr.setRequestHeader(header, value);\n }\n }\n }\n }\n }\n\n const _retryRequest = function () {\n // fail silently and retry\n retriesCount--;\n const retryInterval = !isNaN(settings.get().streaming.retryIntervals[HTTPRequest.LICENSE]) ? settings.get().streaming.retryIntervals[HTTPRequest.LICENSE] : LICENSE_SERVER_REQUEST_RETRY_INTERVAL;\n licenseRequestRetryTimeout = setTimeout(function () {\n _doLicenseRequest(request, retriesCount, timeout, onLoad, onAbort, onError);\n }, retryInterval);\n };\n\n xhr.onload = function () {\n licenseXhrRequest = null;\n if (this.status >= 200 && this.status <= 299 || retriesCount <= 0) {\n onLoad(this);\n } else {\n logger.warn('License request failed (' + this.status + '). Retrying it... Pending retries: ' + retriesCount);\n _retryRequest();\n }\n };\n\n xhr.ontimeout = xhr.onerror = function () {\n licenseXhrRequest = null;\n if (retriesCount <= 0) {\n onError(this);\n } else {\n logger.warn('License request network request failed . Retrying it... Pending retries: ' + retriesCount);\n _retryRequest();\n }\n };\n\n xhr.onabort = function () {\n onAbort(this);\n };\n\n // deprecated, to be removed\n eventBus.trigger(events.LICENSE_REQUEST_SENDING, {\n url: request.url,\n headers: request.headers,\n payload: request.data,\n sessionId: request.sessionId\n });\n\n licenseXhrRequest = xhr;\n xhr.send(request.data);\n }\n\n /**\n * Aborts license request\n * @private\n */\n function _abortLicenseRequest() {\n if (licenseXhrRequest) {\n licenseXhrRequest.onloadend = licenseXhrRequest.onerror = licenseXhrRequest.onprogress = undefined; //Ignore events from aborted requests.\n licenseXhrRequest.abort();\n licenseXhrRequest = null;\n }\n\n if (licenseRequestRetryTimeout) {\n clearTimeout(licenseRequestRetryTimeout);\n licenseRequestRetryTimeout = null;\n }\n }\n\n /**\n * Returns the url of the license server\n * @param {object} protData\n * @param {string} messageType\n * @param {object} sessionToken\n * @param {object} keyMessage\n * @param {object} licenseServerData\n * @return {*}\n * @private\n */\n function _getLicenseServerUrl(protData, messageType, sessionToken, keyMessage, licenseServerData) {\n let url = null;\n const message = keyMessage.message;\n\n // Check if the url is defined by the application\n if (protData && protData.serverURL) {\n const serverURL = protData.serverURL;\n if (typeof serverURL === 'string' && serverURL !== '') {\n url = serverURL;\n } else if (typeof serverURL === 'object' && serverURL.hasOwnProperty(messageType)) {\n url = serverURL[messageType];\n }\n }\n\n // This is the old way of providing the url\n else if (protData && protData.laURL && protData.laURL !== '') {\n url = protData.laURL;\n }\n\n // No url provided by the app. Check the manifest and the pssh\n else {\n // Check for url defined in the manifest\n url = CommonEncryption.getLicenseServerUrlFromMediaInfo(mediaInfoArr, selectedKeySystem.schemeIdURI);\n\n // In case we are not using Clearky we can still get a url from the pssh.\n if (!url && !protectionKeyController.isClearKey(selectedKeySystem)) {\n const psshData = CommonEncryption.getPSSHData(sessionToken.initData);\n url = selectedKeySystem.getLicenseServerURLFromInitData(psshData);\n\n // Still no url, check the keymessage\n if (!url) {\n url = keyMessage.laURL;\n }\n }\n }\n // Possibly update or override the URL based on the message\n url = licenseServerData.getServerURLFromMessage(url, message, messageType);\n\n return url;\n }\n\n /**\n * Add new headers to the existing ones\n * @param {array} reqHeaders\n * @param {object} headers\n * @private\n */\n function _updateHeaders(reqHeaders, headers) {\n if (headers) {\n for (const key in headers) {\n reqHeaders[key] = headers[key];\n }\n }\n }\n\n /**\n * Reports an error that might have occured during the license request\n * @param {object} xhr\n * @param {object} eventData\n * @param {string} keySystemString\n * @param {string} messageType\n * @param {object} licenseServerData\n * @private\n */\n function _reportError(xhr, eventData, keySystemString, messageType, licenseServerData) {\n let errorMsg = 'NONE';\n let data = null;\n\n if (xhr.response) {\n errorMsg = licenseServerData.getErrorResponse(xhr.response, keySystemString, messageType);\n data = {\n serverResponse: xhr.response || null,\n responseCode: xhr.status || null,\n responseText: xhr.statusText || null\n }\n }\n\n _sendLicenseRequestCompleteEvent(eventData, new DashJSError(ProtectionErrors.MEDIA_KEY_MESSAGE_LICENSER_ERROR_CODE,\n ProtectionErrors.MEDIA_KEY_MESSAGE_LICENSER_ERROR_MESSAGE + keySystemString + ' update, XHR complete. status is \"' +\n xhr.statusText + '\" (' + xhr.status + '), readyState is ' + xhr.readyState + '. Response is ' + errorMsg,\n data\n ));\n }\n\n /**\n * Applies custom filters defined by the application\n * @param {array} filters\n * @param {object} param\n * @return {Promise<void>|*}\n * @private\n */\n function _applyFilters(filters, param) {\n if (!filters) return Promise.resolve();\n return filters.reduce((prev, next) => {\n return prev.then(() => {\n return next(param);\n });\n }, Promise.resolve());\n }\n\n /**\n * Event handler for \"needkey\" and \"encrypted\" events\n * @param {object} event\n * @param {number} retry\n * @private\n */\n function _onNeedKey(event, retry) {\n if (!settings.get().streaming.protection.ignoreEmeEncryptedEvent) {\n logger.debug('DRM: onNeedKey');\n\n // Ignore non-cenc initData\n if (event.key.initDataType !== 'cenc') {\n logger.warn('DRM: Only \\'cenc\\' initData is supported! Ignoring initData of type: ' + event.key.initDataType);\n return;\n }\n\n if (mediaInfoArr.length === 0) {\n logger.warn('DRM: onNeedKey called before initializeForMedia, wait until initialized');\n retry = typeof retry === 'undefined' ? 1 : retry + 1;\n if (retry < NEEDKEY_BEFORE_INITIALIZE_RETRIES) {\n needkeyRetries.push(setTimeout(() => {\n _onNeedKey(event, retry);\n }, NEEDKEY_BEFORE_INITIALIZE_TIMEOUT));\n return;\n }\n }\n\n // Some browsers return initData as Uint8Array (IE), some as ArrayBuffer (Chrome).\n // Convert to ArrayBuffer\n let abInitData = event.key.initData;\n if (ArrayBuffer.isView(abInitData)) {\n abInitData = abInitData.buffer;\n }\n\n // If key system has already been selected and initData already seen, then do nothing\n if (selectedKeySystem) {\n const initDataForKS = CommonEncryption.getPSSHForKeySystem(selectedKeySystem, abInitData);\n if (initDataForKS) {\n // Check for duplicate initData\n if (_isInitDataDuplicate(initDataForKS)) {\n return;\n }\n }\n }\n\n logger.debug('DRM: initData:', String.fromCharCode.apply(null, new Uint8Array(abInitData)));\n\n const supportedKs = protectionKeyController.getSupportedKeySystemsFromSegmentPssh(abInitData, protDataSet, sessionType);\n if (supportedKs.length === 0) {\n logger.debug('DRM: Received needkey event with initData, but we don\\'t support any of the key systems!');\n return;\n }\n\n _handleKeySystemFromPssh(supportedKs);\n }\n }\n\n /**\n * Returns all available key systems\n * @return {array}\n */\n function getKeySystems() {\n return protectionKeyController ? protectionKeyController.getKeySystems() : [];\n }\n\n /**\n * Sets all available key systems\n * @param {array} keySystems\n */\n function setKeySystems(keySystems) {\n if (protectionKeyController) {\n protectionKeyController.setKeySystems(keySystems);\n }\n }\n\n instance = {\n initializeForMedia,\n clearMediaInfoArray,\n handleKeySystemFromManifest,\n createKeySession,\n loadKeySession,\n removeKeySession,\n closeKeySession,\n setServerCertificate,\n setMediaElement,\n setSessionType,\n setRobustnessLevel,\n setProtectionData,\n getSupportedKeySystemsFromContentProtection,\n getKeySystems,\n setKeySystems,\n stop,\n reset\n };\n\n setup();\n return instance;\n}\n\nProtectionController.__dashjs_factory_name = 'ProtectionController';\nexport default FactoryMaker.getClassFactory(ProtectionController); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport CommonEncryption from './../CommonEncryption';\nimport KeySystemClearKey from './../drm/KeySystemClearKey';\nimport KeySystemW3CClearKey from './../drm/KeySystemW3CClearKey';\nimport KeySystemWidevine from './../drm/KeySystemWidevine';\nimport KeySystemPlayReady from './../drm/KeySystemPlayReady';\nimport DRMToday from './../servers/DRMToday';\nimport PlayReady from './../servers/PlayReady';\nimport Widevine from './../servers/Widevine';\nimport ClearKey from './../servers/ClearKey';\nimport ProtectionConstants from '../../constants/ProtectionConstants';\n\n/**\n * @module ProtectionKeyController\n * @ignore\n * @description Media protection key system functionality that can be modified/overridden by applications\n */\nfunction ProtectionKeyController() {\n\n let context = this.context;\n\n let instance,\n debug,\n logger,\n keySystems,\n BASE64,\n settings,\n clearkeyKeySystem,\n clearkeyW3CKeySystem;\n\n function setConfig(config) {\n if (!config) return;\n\n if (config.debug) {\n debug = config.debug;\n logger = debug.getLogger(instance);\n }\n\n if (config.BASE64) {\n BASE64 = config.BASE64;\n }\n\n if(config.settings) {\n settings = config.settings\n }\n }\n\n function initialize() {\n keySystems = [];\n\n let keySystem;\n\n // PlayReady\n keySystem = KeySystemPlayReady(context).getInstance({BASE64: BASE64, settings: settings});\n keySystems.push(keySystem);\n\n // Widevine\n keySystem = KeySystemWidevine(context).getInstance({BASE64: BASE64});\n keySystems.push(keySystem);\n\n // ClearKey\n keySystem = KeySystemClearKey(context).getInstance({BASE64: BASE64});\n keySystems.push(keySystem);\n clearkeyKeySystem = keySystem;\n\n // W3C ClearKey\n keySystem = KeySystemW3CClearKey(context).getInstance({BASE64: BASE64, debug: debug});\n keySystems.push(keySystem);\n clearkeyW3CKeySystem = keySystem;\n }\n\n /**\n * Returns a prioritized list of key systems supported\n * by this player (not necessarily those supported by the\n * user agent)\n *\n * @returns {Array.<KeySystem>} a prioritized\n * list of key systems\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function getKeySystems() {\n return keySystems;\n }\n\n /**\n * Sets the prioritized list of key systems to be supported\n * by this player.\n *\n * @param {Array.<KeySystem>} newKeySystems the new prioritized\n * list of key systems\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function setKeySystems(newKeySystems) {\n keySystems = newKeySystems;\n }\n\n /**\n * Returns the key system associated with the given key system string\n * name (i.e. 'org.w3.clearkey')\n *\n * @param {string} systemString the system string\n * @returns {KeySystem|null} the key system\n * or null if no supported key system is associated with the given key\n * system string\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function getKeySystemBySystemString(systemString) {\n for (let i = 0; i < keySystems.length; i++) {\n if (keySystems[i].systemString === systemString) {\n return keySystems[i];\n }\n }\n return null;\n }\n\n /**\n * Determines whether the given key system is ClearKey. This is\n * necessary because the EME spec defines ClearKey and its method\n * for providing keys to the key session; and this method has changed\n * between the various API versions. Our EME-specific ProtectionModels\n * must know if the system is ClearKey so that it can format the keys\n * according to the particular spec version.\n *\n * @param {Object} keySystem the key\n * @returns {boolean} true if this is the ClearKey key system, false\n * otherwise\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function isClearKey(keySystem) {\n return (keySystem === clearkeyKeySystem || keySystem === clearkeyW3CKeySystem);\n }\n\n /**\n * Check equality of initData array buffers.\n *\n * @param {ArrayBuffer} initData1 - first initData\n * @param {ArrayBuffer} initData2 - second initData\n * @returns {boolean} true if the initData arrays are equal in size and\n * contents, false otherwise\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function initDataEquals(initData1, initData2) {\n if (initData1.byteLength === initData2.byteLength) {\n let data1 = new Uint8Array(initData1);\n let data2 = new Uint8Array(initData2);\n\n for (let j = 0; j < data1.length; j++) {\n if (data1[j] !== data2[j]) {\n return false;\n }\n }\n return true;\n }\n return false;\n }\n\n /**\n * Returns a set of supported key systems and CENC initialization data\n * from the given array of ContentProtection elements. Only\n * key systems that are supported by this player will be returned.\n * Key systems are returned in priority order (highest first).\n *\n * @param {Array.<Object>} cps - array of content protection elements parsed\n * from the manifest\n * @param {ProtectionData} protDataSet user specified protection data - license server url etc\n * supported by the content\n * @param {string} default session type\n * @returns {Array.<Object>} array of objects indicating which supported key\n * systems were found. Empty array is returned if no\n * supported key systems were found\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function getSupportedKeySystemsFromContentProtection(cps, protDataSet, sessionType) {\n let cp, ks, ksIdx, cpIdx;\n let supportedKS = [];\n\n if (cps) {\n const cencContentProtection = CommonEncryption.findCencContentProtection(cps);\n for (ksIdx = 0; ksIdx < keySystems.length; ++ksIdx) {\n ks = keySystems[ksIdx];\n\n // Get protection data that applies for current key system\n const protData = _getProtDataForKeySystem(ks.systemString, protDataSet);\n\n for (cpIdx = 0; cpIdx < cps.length; ++cpIdx) {\n cp = cps[cpIdx];\n if (cp.schemeIdUri.toLowerCase() === ks.schemeIdURI) {\n // Look for DRM-specific ContentProtection\n let initData = ks.getInitData(cp, cencContentProtection);\n\n supportedKS.push({\n ks: keySystems[ksIdx],\n keyId: cp.keyId,\n initData: initData,\n protData: protData,\n cdmData: ks.getCDMData(protData ? protData.cdmData : null),\n sessionId: _getSessionId(protData, cp),\n sessionType: _getSessionType(protData, sessionType)\n });\n }\n }\n }\n }\n return supportedKS;\n }\n\n /**\n * Returns key systems supported by this player for the given PSSH\n * initializationData. Key systems are returned in priority order\n * (highest priority first)\n *\n * @param {ArrayBuffer} initData Concatenated PSSH data for all DRMs\n * supported by the content\n * @param {ProtectionData} protDataSet user specified protection data - license server url etc\n * supported by the content\n * @param {string} default session type\n * @returns {Array.<Object>} array of objects indicating which supported key\n * systems were found. Empty array is returned if no\n * supported key systems were found\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function getSupportedKeySystemsFromSegmentPssh(initData, protDataSet, sessionType) {\n let supportedKS = [];\n let pssh = CommonEncryption.parsePSSHList(initData);\n let ks, keySystemString;\n\n for (let ksIdx = 0; ksIdx < keySystems.length; ++ksIdx) {\n ks = keySystems[ksIdx];\n keySystemString = ks.systemString;\n\n // Get protection data that applies for current key system\n const protData = _getProtDataForKeySystem(keySystemString, protDataSet);\n\n if (ks.uuid in pssh) {\n supportedKS.push({\n ks: ks,\n initData: pssh[ks.uuid],\n protData: protData,\n cdmData: ks.getCDMData(protData ? protData.cdmData : null),\n sessionId: _getSessionId(protData),\n sessionType: _getSessionType(protData, sessionType)\n });\n }\n }\n return supportedKS;\n }\n\n /**\n * Returns the license server implementation data that should be used for this request.\n *\n * @param {KeySystem} keySystem the key system\n * associated with this license request\n * @param {ProtectionData} protData protection data to use for the\n * request\n * @param {string} [messageType=\"license-request\"] the message type associated with this\n * request. Supported message types can be found\n * {@link https://w3c.github.io/encrypted-media/#idl-def-MediaKeyMessageType|here}.\n * @returns {LicenseServer|null} the license server\n * implementation that should be used for this request or null if the player should not\n * pass messages of the given type to a license server\n * @memberof module:ProtectionKeyController\n * @instance\n *\n */\n function getLicenseServerModelInstance(keySystem, protData, messageType) {\n\n // Our default server implementations do not do anything with \"license-release\" or\n // \"individualization-request\" messages, so we just send a success event\n if (messageType === 'license-release' || messageType === 'individualization-request') {\n return null;\n }\n\n let licenseServerData = null;\n if (protData && protData.hasOwnProperty('drmtoday')) {\n licenseServerData = DRMToday(context).getInstance({BASE64: BASE64});\n } else if (keySystem.systemString === ProtectionConstants.WIDEVINE_KEYSTEM_STRING) {\n licenseServerData = Widevine(context).getInstance();\n } else if (keySystem.systemString === ProtectionConstants.PLAYREADY_KEYSTEM_STRING) {\n licenseServerData = PlayReady(context).getInstance();\n } else if (keySystem.systemString === ProtectionConstants.CLEARKEY_KEYSTEM_STRING) {\n licenseServerData = ClearKey(context).getInstance();\n }\n\n return licenseServerData;\n }\n\n /**\n * Allows application-specific retrieval of ClearKey keys.\n *\n * @param {KeySystem} clearkeyKeySystem They exact ClearKey System to be used\n * @param {ProtectionData} protData protection data to use for the\n * request\n * @param {ArrayBuffer} message the key message from the CDM\n * @return {ClearKeyKeySet|null} the clear keys associated with\n * the request or null if no keys can be returned by this function\n * @memberof module:ProtectionKeyController\n * @instance\n */\n function processClearKeyLicenseRequest(clearkeyKeySystem, protData, message) {\n try {\n return clearkeyKeySystem.getClearKeysFromProtectionData(protData, message);\n } catch (error) {\n logger.error('Failed to retrieve clearkeys from ProtectionData');\n return null;\n }\n }\n\n function setProtectionData(protectionDataSet) {\n var getProtectionData = function (keySystemString) {\n var protData = null;\n if (protectionDataSet) {\n protData = (keySystemString in protectionDataSet) ? protectionDataSet[keySystemString] : null;\n }\n return protData;\n };\n\n for (var i = 0; i < keySystems.length; i++) {\n var keySystem = keySystems[i];\n if (keySystem.hasOwnProperty('init')) {\n keySystem.init(getProtectionData(keySystem.systemString));\n }\n }\n }\n\n function _getProtDataForKeySystem(systemString, protDataSet) {\n if (!protDataSet) return null;\n return (systemString in protDataSet) ? protDataSet[systemString] : null;\n }\n\n function _getSessionId(protData, cp) {\n // Get sessionId from protectionData or from manifest (ContentProtection)\n if (protData && protData.sessionId) {\n return protData.sessionId;\n } else if (cp && cp.sessionId) {\n return cp.sessionId;\n }\n return null;\n }\n\n function _getSessionType(protData, sessionType) {\n return (protData && protData.sessionType) ? protData.sessionType : sessionType;\n }\n\n instance = {\n initialize,\n setProtectionData,\n isClearKey,\n initDataEquals,\n getKeySystems,\n setKeySystems,\n getKeySystemBySystemString,\n getSupportedKeySystemsFromContentProtection,\n getSupportedKeySystemsFromSegmentPssh,\n getLicenseServerModelInstance,\n processClearKeyLicenseRequest,\n setConfig\n };\n\n return instance;\n}\n\nProtectionKeyController.__dashjs_factory_name = 'ProtectionKeyController';\nexport default dashjs.FactoryMaker.getSingletonFactory(ProtectionKeyController); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport KeyPair from '../vo/KeyPair';\nimport ClearKeyKeySet from '../vo/ClearKeyKeySet';\nimport CommonEncryption from '../CommonEncryption';\nimport ProtectionConstants from '../../constants/ProtectionConstants';\n\nconst uuid = 'e2719d58-a985-b3c9-781a-b030af78d30e';\nconst systemString = ProtectionConstants.CLEARKEY_KEYSTEM_STRING;\nconst schemeIdURI = 'urn:uuid:' + uuid;\n\nfunction KeySystemClearKey(config) {\n\n config = config || {};\n let instance;\n const BASE64 = config.BASE64;\n\n /**\n * Returns desired clearkeys (as specified in the CDM message) from protection data\n *\n * @param {ProtectionData} protectionData the protection data\n * @param {ArrayBuffer} message the ClearKey CDM message\n * @returns {ClearKeyKeySet} the key set or null if none found\n * @throws {Error} if a keyID specified in the CDM message was not found in the\n * protection data\n * @memberof KeySystemClearKey\n */\n function getClearKeysFromProtectionData(protectionData, message) {\n let clearkeySet = null;\n if (protectionData) {\n // ClearKey is the only system that does not require a license server URL, so we\n // handle it here when keys are specified in protection data\n const jsonMsg = JSON.parse(String.fromCharCode.apply(null, new Uint8Array(message)));\n const keyPairs = [];\n for (let i = 0; i < jsonMsg.kids.length; i++) {\n const clearkeyID = jsonMsg.kids[i];\n const clearkey = (protectionData.clearkeys && protectionData.clearkeys.hasOwnProperty(clearkeyID)) ? protectionData.clearkeys[clearkeyID] : null;\n if (!clearkey) {\n throw new Error('DRM: ClearKey keyID (' + clearkeyID + ') is not known!');\n }\n // KeyIDs from CDM are not base64 padded. Keys may or may not be padded\n keyPairs.push(new KeyPair(clearkeyID, clearkey));\n }\n clearkeySet = new ClearKeyKeySet(keyPairs);\n }\n return clearkeySet;\n }\n\n function getInitData(cp, cencContentProtection) {\n try {\n let initData = CommonEncryption.parseInitDataFromContentProtection(cp, BASE64);\n\n if (!initData && cencContentProtection) {\n const cencDefaultKid = cencDefaultKidToBase64Representation(cencContentProtection['cenc:default_KID']);\n const data = { kids: [cencDefaultKid] };\n initData = new TextEncoder().encode(JSON.stringify(data));\n }\n\n return initData;\n } catch (e) {\n return null;\n }\n }\n\n function cencDefaultKidToBase64Representation(cencDefaultKid) {\n try {\n let kid = cencDefaultKid.replace(/-/g, '');\n kid = btoa(kid.match(/\\w{2}/g).map((a) => {\n return String.fromCharCode(parseInt(a, 16));\n }).join(''));\n return kid.replace(/=/g, '')\n .replace(/\\//g, '_')\n .replace(/\\+/g, '-');\n } catch (e) {\n return null;\n }\n }\n\n function getRequestHeadersFromMessage(/*message*/) {\n // Set content type to application/json by default\n return {\n 'Content-Type': 'application/json'\n };\n }\n\n function getLicenseRequestFromMessage(message) {\n return JSON.stringify(JSON.parse(String.fromCharCode.apply(null, new Uint8Array(message))));\n }\n\n function getLicenseServerURLFromInitData(/*initData*/) {\n return null;\n }\n\n function getCDMData(/*cdmData*/) {\n return null;\n }\n\n instance = {\n uuid,\n schemeIdURI,\n systemString,\n getInitData,\n getRequestHeadersFromMessage,\n getLicenseRequestFromMessage,\n getLicenseServerURLFromInitData,\n getCDMData,\n getClearKeysFromProtectionData\n };\n\n return instance;\n}\n\nKeySystemClearKey.__dashjs_factory_name = 'KeySystemClearKey';\nexport default dashjs.FactoryMaker.getSingletonFactory(KeySystemClearKey); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Microsoft PlayReady DRM\n *\n * @class\n * @implements KeySystem\n */\nimport CommonEncryption from '../CommonEncryption';\nimport ProtectionConstants from '../../constants/ProtectionConstants';\n\nconst uuid = '9a04f079-9840-4286-ab92-e65be0885f95';\nconst systemString = ProtectionConstants.PLAYREADY_KEYSTEM_STRING;\nconst schemeIdURI = 'urn:uuid:' + uuid;\nconst PRCDMData = '<PlayReadyCDMData type=\"LicenseAcquisition\"><LicenseAcquisition version=\"1.0\" Proactive=\"false\"><CustomData encoding=\"base64encoded\">%CUSTOMDATA%</CustomData></LicenseAcquisition></PlayReadyCDMData>';\n\nfunction KeySystemPlayReady(config) {\n\n config = config || {};\n let instance;\n let messageFormat = 'utf-16';\n const BASE64 = config.BASE64;\n const settings = config.settings;\n\n function checkConfig() {\n if (!BASE64 || !BASE64.hasOwnProperty('decodeArray') || !BASE64.hasOwnProperty('decodeArray') ) {\n throw new Error('Missing config parameter(s)');\n }\n }\n\n function getRequestHeadersFromMessage(message) {\n let msg,\n xmlDoc;\n const headers = {};\n const parser = new DOMParser();\n\n if (settings && settings.get().streaming.protection.detectPlayreadyMessageFormat) {\n // If message format configured/defaulted to utf-16 AND number of bytes is odd, assume 'unwrapped' raw CDM message.\n if (messageFormat === 'utf-16' && message && message.byteLength % 2 === 1) {\n headers['Content-Type'] = 'text/xml; charset=utf-8';\n return headers;\n }\n }\n\n const dataview = (messageFormat === 'utf-16') ? new Uint16Array(message) : new Uint8Array(message);\n\n msg = String.fromCharCode.apply(null, dataview);\n xmlDoc = parser.parseFromString(msg, 'application/xml');\n\n const headerNameList = xmlDoc.getElementsByTagName('name');\n const headerValueList = xmlDoc.getElementsByTagName('value');\n for (let i = 0; i < headerNameList.length; i++) {\n headers[headerNameList[i].childNodes[0].nodeValue] = headerValueList[i].childNodes[0].nodeValue;\n }\n // Some versions of the PlayReady CDM return 'Content' instead of 'Content-Type'.\n // this is NOT w3c conform and license servers may reject the request!\n // -> rename it to proper w3c definition!\n if (headers.hasOwnProperty('Content')) {\n headers['Content-Type'] = headers.Content;\n delete headers.Content;\n }\n // Set Content-Type header by default if not provided in the the CDM message (<PlayReadyKeyMessage/>)\n // or if the message contains directly the challenge itself (Ex: LG SmartTVs)\n if (!headers.hasOwnProperty('Content-Type')) {\n headers['Content-Type'] = 'text/xml; charset=utf-8';\n }\n return headers;\n }\n\n function getLicenseRequestFromMessage(message) {\n let licenseRequest = null;\n const parser = new DOMParser();\n\n if (settings && settings.get().streaming.protection.detectPlayreadyMessageFormat) {\n // If message format configured/defaulted to utf-16 AND number of bytes is odd, assume 'unwrapped' raw CDM message.\n if (messageFormat === 'utf-16' && message && message.byteLength % 2 === 1) {\n return message;\n }\n }\n\n const dataview = (messageFormat === 'utf-16') ? new Uint16Array(message) : new Uint8Array(message);\n\n checkConfig();\n const msg = String.fromCharCode.apply(null, dataview);\n const xmlDoc = parser.parseFromString(msg, 'application/xml');\n\n if (xmlDoc.getElementsByTagName('PlayReadyKeyMessage')[0]) {\n const Challenge = xmlDoc.getElementsByTagName('Challenge')[0].childNodes[0].nodeValue;\n if (Challenge) {\n licenseRequest = BASE64.decode(Challenge);\n }\n } else {\n // The message from CDM is not a wrapped message as on IE11 and Edge,\n // thus it contains direclty the challenge itself\n // (note that the xmlDoc at this point may be unreadable since it may have been interpreted as UTF-16)\n return message;\n }\n\n return licenseRequest;\n }\n\n function getLicenseServerURLFromInitData(initData) {\n if (initData) {\n const data = new DataView(initData);\n const numRecords = data.getUint16(4, true);\n let offset = 6;\n const parser = new DOMParser();\n\n for (let i = 0; i < numRecords; i++) {\n // Parse the PlayReady Record header\n const recordType = data.getUint16(offset, true);\n offset += 2;\n const recordLength = data.getUint16(offset, true);\n offset += 2;\n if (recordType !== 0x0001) {\n offset += recordLength;\n continue;\n }\n\n const recordData = initData.slice(offset, offset + recordLength);\n const record = String.fromCharCode.apply(null, new Uint16Array(recordData));\n const xmlDoc = parser.parseFromString(record, 'application/xml');\n\n // First try <LA_URL>\n if (xmlDoc.getElementsByTagName('LA_URL')[0]) {\n const laurl = xmlDoc.getElementsByTagName('LA_URL')[0].childNodes[0].nodeValue;\n if (laurl) {\n return laurl;\n }\n }\n\n // Optionally, try <LUI_URL>\n if (xmlDoc.getElementsByTagName('LUI_URL')[0]) {\n const luiurl = xmlDoc.getElementsByTagName('LUI_URL')[0].childNodes[0].nodeValue;\n if (luiurl) {\n return luiurl;\n }\n }\n }\n }\n\n return null;\n }\n\n function getInitData(cpData) {\n // * desc@ getInitData\n // * generate PSSH data from PROHeader defined in MPD file\n // * PSSH format:\n // * size (4)\n // * box type(PSSH) (8)\n // * Protection SystemID (16)\n // * protection system data size (4) - length of decoded PROHeader\n // * decoded PROHeader data from MPD file\n const PSSHBoxType = new Uint8Array([0x70, 0x73, 0x73, 0x68, 0x00, 0x00, 0x00, 0x00]); //'PSSH' 8 bytes\n const playreadySystemID = new Uint8Array([0x9a, 0x04, 0xf0, 0x79, 0x98, 0x40, 0x42, 0x86, 0xab, 0x92, 0xe6, 0x5b, 0xe0, 0x88, 0x5f, 0x95]);\n\n let byteCursor = 0;\n let uint8arraydecodedPROHeader = null;\n\n let PROSize,\n PSSHSize,\n PSSHBoxBuffer,\n PSSHBox,\n PSSHData;\n\n checkConfig();\n if (!cpData) {\n return null;\n }\n // Handle common encryption PSSH\n if ('pssh' in cpData) {\n return CommonEncryption.parseInitDataFromContentProtection(cpData, BASE64);\n }\n // Handle native MS PlayReady ContentProtection elements\n if ('pro' in cpData) {\n uint8arraydecodedPROHeader = BASE64.decodeArray(cpData.pro.__text);\n }\n else if ('prheader' in cpData) {\n uint8arraydecodedPROHeader = BASE64.decodeArray(cpData.prheader.__text);\n }\n else {\n return null;\n }\n\n PROSize = uint8arraydecodedPROHeader.length;\n PSSHSize = 0x4 + PSSHBoxType.length + playreadySystemID.length + 0x4 + PROSize;\n\n PSSHBoxBuffer = new ArrayBuffer(PSSHSize);\n\n PSSHBox = new Uint8Array(PSSHBoxBuffer);\n PSSHData = new DataView(PSSHBoxBuffer);\n\n PSSHData.setUint32(byteCursor, PSSHSize);\n byteCursor += 0x4;\n\n PSSHBox.set(PSSHBoxType, byteCursor);\n byteCursor += PSSHBoxType.length;\n\n PSSHBox.set(playreadySystemID, byteCursor);\n byteCursor += playreadySystemID.length;\n\n PSSHData.setUint32(byteCursor, PROSize);\n byteCursor += 0x4;\n\n PSSHBox.set(uint8arraydecodedPROHeader, byteCursor);\n byteCursor += PROSize;\n\n return PSSHBox.buffer;\n }\n\n /**\n * It seems that some PlayReady implementations return their XML-based CDM\n * messages using UTF16, while others return them as UTF8. Use this function\n * to modify the message format to expect when parsing CDM messages.\n *\n * @param {string} format the expected message format. Either \"utf-8\" or \"utf-16\".\n * @throws {Error} Specified message format is not one of \"utf8\" or \"utf16\"\n */\n function setPlayReadyMessageFormat(format) {\n if (format !== 'utf-8' && format !== 'utf-16') {\n throw new Error('Specified message format is not one of \"utf-8\" or \"utf-16\"');\n }\n messageFormat = format;\n }\n\n /**\n * Get Playready Custom data\n */\n function getCDMData(_cdmData) {\n let customData,\n cdmData,\n cdmDataBytes,\n i;\n\n checkConfig();\n if (!_cdmData) return null;\n\n // Convert custom data into multibyte string\n customData = [];\n for (i = 0; i < _cdmData.length; ++i) {\n customData.push(_cdmData.charCodeAt(i));\n customData.push(0);\n }\n customData = String.fromCharCode.apply(null, customData);\n\n // Encode in Base 64 the custom data string\n customData = BASE64.encode(customData);\n\n // Initialize CDM data with Base 64 encoded custom data\n // (see https://msdn.microsoft.com/en-us/library/dn457361.aspx)\n cdmData = PRCDMData.replace('%CUSTOMDATA%', customData);\n\n // Convert CDM data into multibyte characters\n cdmDataBytes = [];\n for (i = 0; i < cdmData.length; ++i) {\n cdmDataBytes.push(cdmData.charCodeAt(i));\n cdmDataBytes.push(0);\n }\n\n return new Uint8Array(cdmDataBytes).buffer;\n }\n\n instance = {\n uuid,\n schemeIdURI,\n systemString,\n getInitData,\n getRequestHeadersFromMessage,\n getLicenseRequestFromMessage,\n getLicenseServerURLFromInitData,\n getCDMData,\n setPlayReadyMessageFormat\n };\n\n return instance;\n}\n\nKeySystemPlayReady.__dashjs_factory_name = 'KeySystemPlayReady';\nexport default dashjs.FactoryMaker.getSingletonFactory(KeySystemPlayReady); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport KeyPair from '../vo/KeyPair';\nimport ClearKeyKeySet from '../vo/ClearKeyKeySet';\nimport CommonEncryption from '../CommonEncryption';\nimport ProtectionConstants from '../../constants/ProtectionConstants';\n\nconst uuid = '1077efec-c0b2-4d02-ace3-3c1e52e2fb4b';\nconst systemString = ProtectionConstants.CLEARKEY_KEYSTEM_STRING;\nconst schemeIdURI = 'urn:uuid:' + uuid;\n\nfunction KeySystemW3CClearKey(config) {\n let instance;\n const BASE64 = config.BASE64;\n const logger = config.debug.getLogger(instance);\n /**\n * Returns desired clearkeys (as specified in the CDM message) from protection data\n *\n * @param {ProtectionDataSet} protectionData the protection data\n * @param {ArrayBuffer} message the ClearKey CDM message\n * @returns {ClearKeyKeySet} the key set or null if none found\n * @throws {Error} if a keyID specified in the CDM message was not found in the\n * protection data\n * @memberof KeySystemClearKey\n */\n function getClearKeysFromProtectionData(protectionData, message) {\n let clearkeySet = null;\n if (protectionData) {\n // ClearKey is the only system that does not require a license server URL, so we\n // handle it here when keys are specified in protection data\n const jsonMsg = JSON.parse(String.fromCharCode.apply(null, new Uint8Array(message)));\n const keyPairs = [];\n for (let i = 0; i < jsonMsg.kids.length; i++) {\n const clearkeyID = jsonMsg.kids[i];\n const clearkey = (protectionData.clearkeys && protectionData.clearkeys.hasOwnProperty(clearkeyID)) ? protectionData.clearkeys[clearkeyID] : null;\n if (!clearkey) {\n throw new Error('DRM: ClearKey keyID (' + clearkeyID + ') is not known!');\n }\n // KeyIDs from CDM are not base64 padded. Keys may or may not be padded\n keyPairs.push(new KeyPair(clearkeyID, clearkey));\n }\n clearkeySet = new ClearKeyKeySet(keyPairs);\n\n logger.warn('ClearKey schemeIdURI is using W3C Common PSSH systemID (1077efec-c0b2-4d02-ace3-3c1e52e2fb4b) in Content Protection. See DASH-IF IOP v4.1 section 7.6.2.4');\n }\n return clearkeySet;\n }\n\n function getInitData(cp) {\n return CommonEncryption.parseInitDataFromContentProtection(cp, BASE64);\n }\n\n function getRequestHeadersFromMessage(/*message*/) {\n return null;\n }\n\n function getLicenseRequestFromMessage(message) {\n return new Uint8Array(message);\n }\n\n function getLicenseServerURLFromInitData(/*initData*/) {\n return null;\n }\n\n function getCDMData(/*cdmData*/) {\n return null;\n }\n\n instance = {\n uuid: uuid,\n schemeIdURI: schemeIdURI,\n systemString: systemString,\n getInitData: getInitData,\n getRequestHeadersFromMessage: getRequestHeadersFromMessage,\n getLicenseRequestFromMessage: getLicenseRequestFromMessage,\n getLicenseServerURLFromInitData: getLicenseServerURLFromInitData,\n getCDMData: getCDMData,\n getClearKeysFromProtectionData: getClearKeysFromProtectionData\n };\n\n return instance;\n}\n\nKeySystemW3CClearKey.__dashjs_factory_name = 'KeySystemW3CClearKey';\nexport default dashjs.FactoryMaker.getSingletonFactory(KeySystemW3CClearKey); /* jshint ignore:line */\n\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Google Widevine DRM\n *\n * @class\n * @implements MediaPlayer.dependencies.protection.KeySystem\n */\n\nimport CommonEncryption from '../CommonEncryption';\nimport ProtectionConstants from '../../constants/ProtectionConstants';\n\nconst uuid = 'edef8ba9-79d6-4ace-a3c8-27dcd51d21ed';\nconst systemString = ProtectionConstants.WIDEVINE_KEYSTEM_STRING;\nconst schemeIdURI = 'urn:uuid:' + uuid;\n\nfunction KeySystemWidevine(config) {\n\n config = config || {};\n let instance;\n const BASE64 = config.BASE64;\n\n function getInitData(cp) {\n return CommonEncryption.parseInitDataFromContentProtection(cp, BASE64);\n }\n\n function getRequestHeadersFromMessage( /*message*/ ) {\n return null;\n }\n\n function getLicenseRequestFromMessage(message) {\n return new Uint8Array(message);\n }\n\n function getLicenseServerURLFromInitData( /*initData*/ ) {\n return null;\n }\n\n function getCDMData(/*cdmData*/) {\n return null;\n }\n\n instance = {\n uuid,\n schemeIdURI,\n systemString,\n getInitData,\n getRequestHeadersFromMessage,\n getLicenseRequestFromMessage,\n getLicenseServerURLFromInitData,\n getCDMData\n };\n\n return instance;\n}\n\nKeySystemWidevine.__dashjs_factory_name = 'KeySystemWidevine';\nexport default dashjs.FactoryMaker.getSingletonFactory(KeySystemWidevine); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport ErrorsBase from '../../../core/errors/ErrorsBase';\n\n/**\n * @class\n */\nclass ProtectionErrors extends ErrorsBase {\n constructor() {\n super();\n\n /**\n * Generid key Error code\n */\n this.MEDIA_KEYERR_CODE = 100;\n /**\n * Error code returned by keyerror api for ProtectionModel_01b\n */\n this.MEDIA_KEYERR_UNKNOWN_CODE = 101;\n /**\n * Error code returned by keyerror api for ProtectionModel_01b\n */\n this.MEDIA_KEYERR_CLIENT_CODE = 102;\n /**\n * Error code returned by keyerror api for ProtectionModel_01b\n */\n this.MEDIA_KEYERR_SERVICE_CODE = 103;\n /**\n * Error code returned by keyerror api for ProtectionModel_01b\n */\n this.MEDIA_KEYERR_OUTPUT_CODE = 104;\n /**\n * Error code returned by keyerror api for ProtectionModel_01b\n */\n this.MEDIA_KEYERR_HARDWARECHANGE_CODE = 105;\n /**\n * Error code returned by keyerror api for ProtectionModel_01b\n */\n this.MEDIA_KEYERR_DOMAIN_CODE = 106;\n\n /**\n * Error code returned when an error occured in keymessage event for ProtectionModel_01b\n */\n this.MEDIA_KEY_MESSAGE_ERROR_CODE = 107;\n /**\n * Error code returned when challenge is invalid in keymessage event (event triggered by CDM)\n */\n this.MEDIA_KEY_MESSAGE_NO_CHALLENGE_ERROR_CODE = 108;\n /**\n * Error code returned when License server certificate has not been successfully updated\n */\n this.SERVER_CERTIFICATE_UPDATED_ERROR_CODE = 109;\n /**\n * Error code returned when license validity has expired\n */\n this.KEY_STATUS_CHANGED_EXPIRED_ERROR_CODE = 110;\n /**\n * Error code returned when no licenser url is defined\n */\n this.MEDIA_KEY_MESSAGE_NO_LICENSE_SERVER_URL_ERROR_CODE = 111;\n /**\n * Error code returned when key system access is denied\n */\n this.KEY_SYSTEM_ACCESS_DENIED_ERROR_CODE = 112;\n /**\n * Error code returned when key session has not been successfully created\n */\n this.KEY_SESSION_CREATED_ERROR_CODE = 113;\n /**\n * Error code returned when license request failed after a keymessage event has been triggered\n */\n this.MEDIA_KEY_MESSAGE_LICENSER_ERROR_CODE = 114;\n\n this.MEDIA_KEYERR_UNKNOWN_MESSAGE = 'An unspecified error occurred. This value is used for errors that don\\'t match any of the other codes.';\n this.MEDIA_KEYERR_CLIENT_MESSAGE = 'The Key System could not be installed or updated.';\n this.MEDIA_KEYERR_SERVICE_MESSAGE = 'The message passed into update indicated an error from the license service.';\n this.MEDIA_KEYERR_OUTPUT_MESSAGE = 'There is no available output device with the required characteristics for the content protection system.';\n this.MEDIA_KEYERR_HARDWARECHANGE_MESSAGE = 'A hardware configuration change caused a content protection error.';\n this.MEDIA_KEYERR_DOMAIN_MESSAGE = 'An error occurred in a multi-device domain licensing configuration. The most common error is a failure to join the domain.';\n this.MEDIA_KEY_MESSAGE_ERROR_MESSAGE = 'Multiple key sessions were creates with a user-agent that does not support sessionIDs!! Unpredictable behavior ahead!';\n this.MEDIA_KEY_MESSAGE_NO_CHALLENGE_ERROR_MESSAGE = 'DRM: Empty key message from CDM';\n this.SERVER_CERTIFICATE_UPDATED_ERROR_MESSAGE = 'Error updating server certificate -- ';\n this.KEY_STATUS_CHANGED_EXPIRED_ERROR_MESSAGE = 'DRM: KeyStatusChange error! -- License has expired';\n this.MEDIA_KEY_MESSAGE_NO_LICENSE_SERVER_URL_ERROR_MESSAGE = 'DRM: No license server URL specified!';\n this.KEY_SYSTEM_ACCESS_DENIED_ERROR_MESSAGE = 'DRM: KeySystem Access Denied! -- ';\n this.KEY_SESSION_CREATED_ERROR_MESSAGE = 'DRM: unable to create session! --';\n this.MEDIA_KEY_MESSAGE_LICENSER_ERROR_MESSAGE = 'DRM: licenser error! --';\n }\n}\n\nlet protectionErrors = new ProtectionErrors();\nexport default protectionErrors;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Initial implementation of EME\n *\n * Implemented by Google Chrome prior to v36\n *\n * @implements ProtectionModel\n * @class\n */\nimport ProtectionKeyController from '../controllers/ProtectionKeyController';\nimport NeedKey from '../vo/NeedKey';\nimport DashJSError from '../../vo/DashJSError';\nimport KeyMessage from '../vo/KeyMessage';\nimport KeySystemConfiguration from '../vo/KeySystemConfiguration';\nimport KeySystemAccess from '../vo/KeySystemAccess';\nimport ProtectionErrors from '../errors/ProtectionErrors';\n\nfunction ProtectionModel_01b(config) {\n\n config = config || {};\n const context = this.context;\n const eventBus = config.eventBus;//Need to pass in here so we can use same instance since this is optional module\n const events = config.events;\n const debug = config.debug;\n const api = config.api;\n const errHandler = config.errHandler;\n\n let instance,\n logger,\n videoElement,\n keySystem,\n protectionKeyController,\n\n // With this version of the EME APIs, sessionIds are not assigned to\n // sessions until the first key message is received. We are assuming\n // that in the case of multiple sessions, key messages will be received\n // in the order that generateKeyRequest() is called.\n // Holding spot for newly-created sessions until we determine whether or\n // not the CDM supports sessionIds\n pendingSessions,\n\n // List of sessions that have been initialized. Only the first position will\n // be used in the case that the CDM does not support sessionIds\n sessions,\n\n // Not all CDMs support the notion of sessionIds. Without sessionIds\n // there is no way for us to differentiate between sessions, therefore\n // we must only allow a single session. Once we receive the first key\n // message we can set this flag to determine if more sessions are allowed\n moreSessionsAllowed,\n\n // This is our main event handler for all desired HTMLMediaElement events\n // related to EME. These events are translated into our API-independent\n // versions of the same events\n eventHandler;\n\n function setup() {\n logger = debug.getLogger(instance);\n videoElement = null;\n keySystem = null;\n pendingSessions = [];\n sessions = [];\n protectionKeyController = ProtectionKeyController(context).getInstance();\n eventHandler = createEventHandler();\n }\n\n function reset() {\n if (videoElement) {\n removeEventListeners();\n }\n for (let i = 0; i < sessions.length; i++) {\n closeKeySession(sessions[i]);\n }\n eventBus.trigger(events.TEARDOWN_COMPLETE);\n }\n\n function getAllInitData() {\n const retVal = [];\n for (let i = 0; i < pendingSessions.length; i++) {\n retVal.push(pendingSessions[i].initData);\n }\n for (let i = 0; i < sessions.length; i++) {\n retVal.push(sessions[i].initData);\n }\n return retVal;\n }\n\n function getSessions() {\n return sessions.concat(pendingSessions);\n }\n\n function requestKeySystemAccess(ksConfigurations) {\n return new Promise((resolve, reject) => {\n let ve = videoElement;\n if (!ve) { // Must have a video element to do this capability tests\n ve = document.createElement('video');\n }\n\n // Try key systems in order, first one with supported key system configuration\n // is used\n let found = false;\n for (let ksIdx = 0; ksIdx < ksConfigurations.length; ksIdx++) {\n const systemString = ksConfigurations[ksIdx].ks.systemString;\n const configs = ksConfigurations[ksIdx].configs;\n let supportedAudio = null;\n let supportedVideo = null;\n\n // Try key system configs in order, first one with supported audio/video\n // is used\n for (let configIdx = 0; configIdx < configs.length; configIdx++) {\n //let audios = configs[configIdx].audioCapabilities;\n const videos = configs[configIdx].videoCapabilities;\n // Look for supported video container/codecs\n if (videos && videos.length !== 0) {\n supportedVideo = []; // Indicates that we have a requested video config\n for (let videoIdx = 0; videoIdx < videos.length; videoIdx++) {\n if (ve.canPlayType(videos[videoIdx].contentType, systemString) !== '') {\n supportedVideo.push(videos[videoIdx]);\n }\n }\n }\n\n // No supported audio or video in this configuration OR we have\n // requested audio or video configuration that is not supported\n if ((!supportedAudio && !supportedVideo) ||\n (supportedAudio && supportedAudio.length === 0) ||\n (supportedVideo && supportedVideo.length === 0)) {\n continue;\n }\n\n // This configuration is supported\n found = true;\n const ksConfig = new KeySystemConfiguration(supportedAudio, supportedVideo);\n const ks = protectionKeyController.getKeySystemBySystemString(systemString);\n const keySystemAccess = new KeySystemAccess(ks, ksConfig)\n eventBus.trigger(events.KEY_SYSTEM_ACCESS_COMPLETE, { data: keySystemAccess });\n resolve({ data: keySystemAccess });\n break;\n }\n }\n if (!found) {\n const errorMessage = 'Key system access denied! -- No valid audio/video content configurations detected!';\n eventBus.trigger(events.KEY_SYSTEM_ACCESS_COMPLETE, { error: errorMessage });\n reject({ error: errorMessage });\n }\n })\n\n }\n\n function selectKeySystem(keySystemAccess) {\n keySystem = keySystemAccess.keySystem;\n return Promise.resolve(keySystem);\n }\n\n function setMediaElement(mediaElement) {\n if (videoElement === mediaElement) {\n return;\n }\n\n // Replacing the previous element\n if (videoElement) {\n removeEventListeners();\n\n // Close any open sessions - avoids memory leak on LG webOS 2016/2017 TVs\n for (var i = 0; i < sessions.length; i++) {\n closeKeySession(sessions[i]);\n }\n sessions = [];\n }\n\n videoElement = mediaElement;\n\n // Only if we are not detaching from the existing element\n if (videoElement) {\n videoElement.addEventListener(api.keyerror, eventHandler);\n videoElement.addEventListener(api.needkey, eventHandler);\n videoElement.addEventListener(api.keymessage, eventHandler);\n videoElement.addEventListener(api.keyadded, eventHandler);\n eventBus.trigger(events.VIDEO_ELEMENT_SELECTED);\n }\n }\n\n function createKeySession(ksInfo) {\n if (!keySystem) {\n throw new Error('Can not create sessions until you have selected a key system');\n }\n\n // Determine if creating a new session is allowed\n if (moreSessionsAllowed || sessions.length === 0) {\n const newSession = { // Implements SessionToken\n sessionId: null,\n keyId: ksInfo.keyId,\n initData: ksInfo.initData,\n\n getKeyId: function () {\n return this.keyId;\n },\n\n getSessionId: function () {\n return this.sessionId;\n },\n\n getExpirationTime: function () {\n return NaN;\n },\n\n getSessionType: function () {\n return 'temporary';\n }\n };\n pendingSessions.push(newSession);\n\n // Send our request to the CDM\n videoElement[api.generateKeyRequest](keySystem.systemString, new Uint8Array(ksInfo.initData));\n\n return newSession;\n\n } else {\n throw new Error('Multiple sessions not allowed!');\n }\n\n }\n\n function updateKeySession(sessionToken, message) {\n const sessionId = sessionToken.sessionId;\n if (!protectionKeyController.isClearKey(keySystem)) {\n // Send our request to the CDM\n videoElement[api.addKey](keySystem.systemString,\n new Uint8Array(message), new Uint8Array(sessionToken.initData), sessionId);\n } else {\n // For clearkey, message is a ClearKeyKeySet\n for (let i = 0; i < message.keyPairs.length; i++) {\n videoElement[api.addKey](keySystem.systemString,\n message.keyPairs[i].key, message.keyPairs[i].keyID, sessionId);\n }\n }\n eventBus.trigger(events.KEY_SESSION_UPDATED);\n }\n\n function closeKeySession(sessionToken) {\n // Send our request to the CDM\n try {\n videoElement[api.cancelKeyRequest](keySystem.systemString, sessionToken.sessionId);\n } catch (error) {\n eventBus.trigger(events.KEY_SESSION_CLOSED, {\n data: null,\n error: 'Error closing session (' + sessionToken.sessionId + ') ' + error.message\n });\n }\n }\n\n function setServerCertificate(/*serverCertificate*/) { /* Not supported */\n }\n\n function loadKeySession(/*ksInfo*/) { /* Not supported */\n }\n\n function removeKeySession(/*sessionToken*/) { /* Not supported */\n }\n\n function createEventHandler() {\n return {\n handleEvent: function (event) {\n let sessionToken = null;\n switch (event.type) {\n case api.needkey:\n let initData = ArrayBuffer.isView(event.initData) ? event.initData.buffer : event.initData;\n eventBus.trigger(events.NEED_KEY, { key: new NeedKey(initData, 'cenc') });\n break;\n\n case api.keyerror:\n sessionToken = findSessionByID(sessions, event.sessionId);\n if (!sessionToken) {\n sessionToken = findSessionByID(pendingSessions, event.sessionId);\n }\n\n if (sessionToken) {\n let code = ProtectionErrors.MEDIA_KEYERR_CODE;\n let msg = '';\n switch (event.errorCode.code) {\n case 1:\n code = ProtectionErrors.MEDIA_KEYERR_UNKNOWN_CODE;\n msg += 'MEDIA_KEYERR_UNKNOWN - ' + ProtectionErrors.MEDIA_KEYERR_UNKNOWN_MESSAGE;\n break;\n case 2:\n code = ProtectionErrors.MEDIA_KEYERR_CLIENT_CODE;\n msg += 'MEDIA_KEYERR_CLIENT - ' + ProtectionErrors.MEDIA_KEYERR_CLIENT_MESSAGE;\n break;\n case 3:\n code = ProtectionErrors.MEDIA_KEYERR_SERVICE_CODE;\n msg += 'MEDIA_KEYERR_SERVICE - ' + ProtectionErrors.MEDIA_KEYERR_SERVICE_MESSAGE;\n break;\n case 4:\n code = ProtectionErrors.MEDIA_KEYERR_OUTPUT_CODE;\n msg += 'MEDIA_KEYERR_OUTPUT - ' + ProtectionErrors.MEDIA_KEYERR_OUTPUT_MESSAGE;\n break;\n case 5:\n code = ProtectionErrors.MEDIA_KEYERR_HARDWARECHANGE_CODE;\n msg += 'MEDIA_KEYERR_HARDWARECHANGE - ' + ProtectionErrors.MEDIA_KEYERR_HARDWARECHANGE_MESSAGE;\n break;\n case 6:\n code = ProtectionErrors.MEDIA_KEYERR_DOMAIN_CODE;\n msg += 'MEDIA_KEYERR_DOMAIN - ' + ProtectionErrors.MEDIA_KEYERR_DOMAIN_MESSAGE;\n break;\n }\n msg += ' System Code = ' + event.systemCode;\n // TODO: Build error string based on key error\n eventBus.trigger(events.KEY_ERROR, { error: new DashJSError(code, msg, sessionToken) });\n } else {\n logger.error('No session token found for key error');\n }\n break;\n\n case api.keyadded:\n sessionToken = findSessionByID(sessions, event.sessionId);\n if (!sessionToken) {\n sessionToken = findSessionByID(pendingSessions, event.sessionId);\n }\n\n if (sessionToken) {\n logger.debug('DRM: Key added.');\n eventBus.trigger(events.KEY_ADDED, { data: sessionToken });//TODO not sure anything is using sessionToken? why there?\n } else {\n logger.debug('No session token found for key added');\n }\n break;\n\n case api.keymessage:\n // If this CDM does not support session IDs, we will be limited\n // to a single session\n moreSessionsAllowed = (event.sessionId !== null) && (event.sessionId !== undefined);\n\n // SessionIDs supported\n if (moreSessionsAllowed) {\n // Attempt to find an uninitialized token with this sessionId\n sessionToken = findSessionByID(sessions, event.sessionId);\n if (!sessionToken && pendingSessions.length > 0) {\n\n // This is the first message for our latest session, so set the\n // sessionId and add it to our list\n sessionToken = pendingSessions.shift();\n sessions.push(sessionToken);\n sessionToken.sessionId = event.sessionId;\n\n eventBus.trigger(events.KEY_SESSION_CREATED, { data: sessionToken });\n }\n } else if (pendingSessions.length > 0) { // SessionIDs not supported\n sessionToken = pendingSessions.shift();\n sessions.push(sessionToken);\n\n if (pendingSessions.length !== 0) {\n errHandler.error(new DashJSError(ProtectionErrors.MEDIA_KEY_MESSAGE_ERROR_CODE, ProtectionErrors.MEDIA_KEY_MESSAGE_ERROR_MESSAGE));\n }\n }\n\n if (sessionToken) {\n let message = ArrayBuffer.isView(event.message) ? event.message.buffer : event.message;\n\n // For ClearKey, the spec mandates that you pass this message to the\n // addKey method, so we always save it to the token since there is no\n // way to tell which key system is in use\n sessionToken.keyMessage = message;\n eventBus.trigger(events.INTERNAL_KEY_MESSAGE, { data: new KeyMessage(sessionToken, message, event.defaultURL) });\n\n } else {\n logger.warn('No session token found for key message');\n }\n break;\n }\n }\n };\n }\n\n\n /**\n * Helper function to retrieve the stored session token based on a given\n * sessionId value\n *\n * @param {Array} sessionArray - the array of sessions to search\n * @param {*} sessionId - the sessionId to search for\n * @returns {*} the session token with the given sessionId\n */\n function findSessionByID(sessionArray, sessionId) {\n if (!sessionId || !sessionArray) {\n return null;\n } else {\n const len = sessionArray.length;\n for (let i = 0; i < len; i++) {\n if (sessionArray[i].sessionId == sessionId) {\n return sessionArray[i];\n }\n }\n return null;\n }\n }\n\n function removeEventListeners() {\n videoElement.removeEventListener(api.keyerror, eventHandler);\n videoElement.removeEventListener(api.needkey, eventHandler);\n videoElement.removeEventListener(api.keymessage, eventHandler);\n videoElement.removeEventListener(api.keyadded, eventHandler);\n }\n\n instance = {\n getAllInitData,\n getSessions,\n requestKeySystemAccess,\n selectKeySystem,\n setMediaElement,\n createKeySession,\n updateKeySession,\n closeKeySession,\n setServerCertificate,\n loadKeySession,\n removeKeySession,\n stop: reset,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nProtectionModel_01b.__dashjs_factory_name = 'ProtectionModel_01b';\nexport default dashjs.FactoryMaker.getClassFactory(ProtectionModel_01b); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Most recent EME implementation\n *\n * Implemented by Google Chrome v36+ (Windows, OSX, Linux)\n *\n * @implements ProtectionModel\n * @class\n */\nimport ProtectionKeyController from '../controllers/ProtectionKeyController';\nimport NeedKey from '../vo/NeedKey';\nimport ProtectionErrors from '../errors/ProtectionErrors';\nimport DashJSError from '../../vo/DashJSError';\nimport KeyMessage from '../vo/KeyMessage';\nimport KeySystemAccess from '../vo/KeySystemAccess';\nimport ProtectionConstants from '../../constants/ProtectionConstants';\n\nconst SYSTEM_STRING_PRIORITY = {};\nSYSTEM_STRING_PRIORITY[ProtectionConstants.PLAYREADY_KEYSTEM_STRING] = [ProtectionConstants.PLAYREADY_KEYSTEM_STRING, ProtectionConstants.PLAYREADY_RECOMMENDATION_KEYSTEM_STRING];\nSYSTEM_STRING_PRIORITY[ProtectionConstants.WIDEVINE_KEYSTEM_STRING] = [ProtectionConstants.WIDEVINE_KEYSTEM_STRING];\nSYSTEM_STRING_PRIORITY[ProtectionConstants.CLEARKEY_KEYSTEM_STRING] = [ProtectionConstants.CLEARKEY_KEYSTEM_STRING];\n\nfunction ProtectionModel_21Jan2015(config) {\n\n config = config || {};\n const context = this.context;\n const eventBus = config.eventBus;//Need to pass in here so we can use same instance since this is optional module\n const events = config.events;\n const debug = config.debug;\n\n let instance,\n logger,\n keySystem,\n videoElement,\n mediaKeys,\n sessions,\n eventHandler,\n protectionKeyController;\n\n function setup() {\n logger = debug.getLogger(instance);\n keySystem = null;\n videoElement = null;\n mediaKeys = null;\n sessions = [];\n protectionKeyController = ProtectionKeyController(context).getInstance();\n eventHandler = createEventHandler();\n }\n\n function reset() {\n const numSessions = sessions.length;\n let session;\n\n if (numSessions !== 0) {\n // Called when we are done closing a session. Success or fail\n const done = function (session) {\n removeSession(session);\n if (sessions.length === 0) {\n if (videoElement) {\n videoElement.removeEventListener('encrypted', eventHandler);\n videoElement.setMediaKeys(null).then(function () {\n eventBus.trigger(events.TEARDOWN_COMPLETE);\n });\n } else {\n eventBus.trigger(events.TEARDOWN_COMPLETE);\n }\n }\n };\n for (let i = 0; i < numSessions; i++) {\n session = sessions[i];\n (function (s) {\n _closeKeySessionInternal(session)\n done(s);\n })(session);\n }\n } else {\n eventBus.trigger(events.TEARDOWN_COMPLETE);\n }\n }\n\n function stop() {\n // Close and remove not usable sessions\n let session;\n for (let i = 0; i < sessions.length; i++) {\n session = sessions[i];\n if (!session.getUsable()) {\n _closeKeySessionInternal(session)\n removeSession(session);\n }\n }\n }\n\n function getAllInitData() {\n const retVal = [];\n for (let i = 0; i < sessions.length; i++) {\n if (sessions[i].initData) {\n retVal.push(sessions[i].initData);\n }\n }\n return retVal;\n }\n\n function getSessions() {\n return sessions;\n }\n\n function requestKeySystemAccess(ksConfigurations) {\n return new Promise((resolve, reject) => {\n _requestKeySystemAccessInternal(ksConfigurations, 0, resolve, reject);\n })\n }\n\n /**\n * Initializes access to a key system. Once we found a valid configuration we get a mediaKeySystemAccess object\n * @param ksConfigurations\n * @param idx\n * @param resolve\n * @param reject\n * @private\n */\n function _requestKeySystemAccessInternal(ksConfigurations, idx, resolve, reject) {\n\n // In case requestMediaKeySystemAccess is not available we can not proceed and dispatch an error\n if (navigator.requestMediaKeySystemAccess === undefined ||\n typeof navigator.requestMediaKeySystemAccess !== 'function') {\n const msg = 'Insecure origins are not allowed';\n eventBus.trigger(events.KEY_SYSTEM_ACCESS_COMPLETE, { error: msg });\n reject({ error: msg });\n return;\n }\n\n // If a systemStringPriority is defined by the application we use these values. Otherwise we use the default system string\n // This is useful for DRM systems such as Playready for which multiple system strings are possible for instance com.microsoft.playready and com.microsoft.playready.recommendation\n const protDataSystemStringPriority = ksConfigurations[idx].protData && ksConfigurations[idx].protData.systemStringPriority ? ksConfigurations[idx].protData.systemStringPriority : null;\n const configs = ksConfigurations[idx].configs;\n const currentKeySystem = ksConfigurations[idx].ks;\n let systemString = currentKeySystem.systemString;\n\n // Use the default values in case no values are provided by the application\n const systemStringsToApply = protDataSystemStringPriority ? protDataSystemStringPriority : SYSTEM_STRING_PRIORITY[systemString] ? SYSTEM_STRING_PRIORITY[systemString] : [systemString];\n\n // Check all the available system strings and the available configurations for support\n _checkAccessForKeySystem(systemStringsToApply, configs)\n .then((mediaKeySystemAccess) => {\n const configuration = (typeof mediaKeySystemAccess.getConfiguration === 'function') ?\n mediaKeySystemAccess.getConfiguration() : null;\n const keySystemAccess = new KeySystemAccess(currentKeySystem, configuration);\n\n keySystemAccess.mksa = mediaKeySystemAccess;\n eventBus.trigger(events.KEY_SYSTEM_ACCESS_COMPLETE, { data: keySystemAccess });\n resolve({ data: keySystemAccess });\n })\n .catch((e) => {\n if (idx + 1 < ksConfigurations.length) {\n _requestKeySystemAccessInternal(ksConfigurations, idx + 1, resolve, reject);\n } else {\n const errorMessage = 'Key system access denied! ';\n eventBus.trigger(events.KEY_SYSTEM_ACCESS_COMPLETE, { error: errorMessage + e.message });\n reject({ error: errorMessage + e.message });\n }\n })\n }\n\n /**\n * For a specific key system: Iterate over the possible system strings and resolve once a valid configuration was found\n * @param {array} systemStringsToApply\n * @param {object} configs\n * @return {Promise}\n * @private\n */\n function _checkAccessForKeySystem(systemStringsToApply, configs) {\n return new Promise((resolve, reject) => {\n _checkAccessForSystemStrings(systemStringsToApply, configs, 0, resolve, reject);\n })\n }\n\n /**\n * Recursively iterate over the possible system strings until a supported configuration is found or we ran out of options\n * @param {array} systemStringsToApply\n * @param {object} configs\n * @param {number} idx\n * @param {function} resolve\n * @param {function} reject\n * @private\n */\n function _checkAccessForSystemStrings(systemStringsToApply, configs, idx, resolve, reject) {\n const systemString = systemStringsToApply[idx];\n\n logger.debug(`Requesting key system access for system string ${systemString}`);\n\n navigator.requestMediaKeySystemAccess(systemString, configs)\n .then((mediaKeySystemAccess) => {\n mediaKeySystemAccess.selectedSystemString = systemString;\n resolve(mediaKeySystemAccess);\n })\n .catch((e) => {\n if (idx + 1 < systemStringsToApply.length) {\n _checkAccessForSystemStrings(systemStringsToApply, configs, idx + 1, resolve, reject);\n } else {\n reject(e);\n }\n });\n }\n\n /**\n * Selects a key system by creating the mediaKeys and adding them to the video element\n * @param keySystemAccess\n * @return {Promise<unknown>}\n */\n function selectKeySystem(keySystemAccess) {\n return new Promise((resolve, reject) => {\n keySystemAccess.mksa.createMediaKeys()\n .then((mkeys) => {\n keySystem = keySystemAccess.keySystem;\n mediaKeys = mkeys;\n if (videoElement) {\n return videoElement.setMediaKeys(mediaKeys)\n } else {\n return Promise.resolve();\n }\n })\n .then(() => {\n resolve(keySystem);\n })\n .catch(function () {\n reject({ error: 'Error selecting keys system (' + keySystemAccess.keySystem.systemString + ')! Could not create MediaKeys -- TODO' });\n });\n })\n }\n\n function setMediaElement(mediaElement) {\n if (videoElement === mediaElement)\n return;\n\n // Replacing the previous element\n if (videoElement) {\n videoElement.removeEventListener('encrypted', eventHandler);\n if (videoElement.setMediaKeys) {\n videoElement.setMediaKeys(null);\n }\n }\n\n videoElement = mediaElement;\n\n // Only if we are not detaching from the existing element\n if (videoElement) {\n videoElement.addEventListener('encrypted', eventHandler);\n if (videoElement.setMediaKeys && mediaKeys) {\n videoElement.setMediaKeys(mediaKeys);\n }\n }\n }\n\n function setServerCertificate(serverCertificate) {\n if (!keySystem || !mediaKeys) {\n throw new Error('Can not set server certificate until you have selected a key system');\n }\n mediaKeys.setServerCertificate(serverCertificate).then(function () {\n logger.info('DRM: License server certificate successfully updated.');\n eventBus.trigger(events.SERVER_CERTIFICATE_UPDATED);\n }).catch(function (error) {\n eventBus.trigger(events.SERVER_CERTIFICATE_UPDATED, { error: new DashJSError(ProtectionErrors.SERVER_CERTIFICATE_UPDATED_ERROR_CODE, ProtectionErrors.SERVER_CERTIFICATE_UPDATED_ERROR_MESSAGE + error.name) });\n });\n }\n\n /**\n * Create a key session, a session token and initialize a request by calling generateRequest\n * @param ksInfo\n */\n function createKeySession(ksInfo) {\n if (!keySystem || !mediaKeys) {\n throw new Error('Can not create sessions until you have selected a key system');\n }\n\n const session = mediaKeys.createSession(ksInfo.sessionType);\n const sessionToken = createSessionToken(session, ksInfo);\n\n\n // The \"keyids\" type is used for Clearkey when keys are provided directly in the protection data and a request to a license server is not needed\n const dataType = keySystem.systemString === ProtectionConstants.CLEARKEY_KEYSTEM_STRING && (ksInfo.initData || (ksInfo.protData && ksInfo.protData.clearkeys)) ? ProtectionConstants.INITIALIZATION_DATA_TYPE_KEYIDS : ProtectionConstants.INITIALIZATION_DATA_TYPE_CENC;\n\n session.generateRequest(dataType, ksInfo.initData).then(function () {\n logger.debug('DRM: Session created. SessionID = ' + sessionToken.getSessionId());\n eventBus.trigger(events.KEY_SESSION_CREATED, { data: sessionToken });\n }).catch(function (error) {\n removeSession(sessionToken);\n eventBus.trigger(events.KEY_SESSION_CREATED, {\n data: null,\n error: new DashJSError(ProtectionErrors.KEY_SESSION_CREATED_ERROR_CODE, ProtectionErrors.KEY_SESSION_CREATED_ERROR_MESSAGE + 'Error generating key request -- ' + error.name)\n });\n });\n }\n\n function updateKeySession(sessionToken, message) {\n const session = sessionToken.session;\n\n // Send our request to the key session\n if (protectionKeyController.isClearKey(keySystem)) {\n message = message.toJWK();\n }\n session.update(message)\n .then(() => {\n eventBus.trigger(events.KEY_SESSION_UPDATED);\n })\n .catch(function (error) {\n eventBus.trigger(events.KEY_ERROR, { error: new DashJSError(ProtectionErrors.MEDIA_KEYERR_CODE, 'Error sending update() message! ' + error.name, sessionToken) });\n });\n }\n\n function loadKeySession(ksInfo) {\n if (!keySystem || !mediaKeys) {\n throw new Error('Can not load sessions until you have selected a key system');\n }\n\n const sessionId = ksInfo.sessionId;\n\n // Check if session Id is not already loaded or loading\n for (let i = 0; i < sessions.length; i++) {\n if (sessionId === sessions[i].sessionId) {\n logger.warn('DRM: Ignoring session ID because we have already seen it!');\n return;\n }\n }\n\n const session = mediaKeys.createSession(ksInfo.sessionType);\n const sessionToken = createSessionToken(session, ksInfo);\n\n // Load persisted session data into our newly created session object\n session.load(sessionId).then(function (success) {\n if (success) {\n logger.debug('DRM: Session loaded. SessionID = ' + sessionToken.getSessionId());\n eventBus.trigger(events.KEY_SESSION_CREATED, { data: sessionToken });\n } else {\n removeSession(sessionToken);\n eventBus.trigger(events.KEY_SESSION_CREATED, {\n data: null,\n error: new DashJSError(ProtectionErrors.KEY_SESSION_CREATED_ERROR_CODE, ProtectionErrors.KEY_SESSION_CREATED_ERROR_MESSAGE + 'Could not load session! Invalid Session ID (' + sessionId + ')')\n });\n }\n }).catch(function (error) {\n removeSession(sessionToken);\n eventBus.trigger(events.KEY_SESSION_CREATED, {\n data: null,\n error: new DashJSError(ProtectionErrors.KEY_SESSION_CREATED_ERROR_CODE, ProtectionErrors.KEY_SESSION_CREATED_ERROR_MESSAGE + 'Could not load session (' + sessionId + ')! ' + error.name)\n });\n });\n }\n\n function removeKeySession(sessionToken) {\n const session = sessionToken.session;\n\n session.remove().then(function () {\n logger.debug('DRM: Session removed. SessionID = ' + sessionToken.getSessionId());\n eventBus.trigger(events.KEY_SESSION_REMOVED, { data: sessionToken.getSessionId() });\n }, function (error) {\n eventBus.trigger(events.KEY_SESSION_REMOVED, {\n data: null,\n error: 'Error removing session (' + sessionToken.getSessionId() + '). ' + error.name\n });\n\n });\n }\n\n function closeKeySession(sessionToken) {\n // Send our request to the key session\n _closeKeySessionInternal(sessionToken).catch(function (error) {\n removeSession(sessionToken);\n eventBus.trigger(events.KEY_SESSION_CLOSED, {\n data: null,\n error: 'Error closing session (' + sessionToken.getSessionId() + ') ' + error.name\n });\n });\n }\n\n function _closeKeySessionInternal(sessionToken) {\n if (!sessionToken || !sessionToken.session) {\n return Promise.resolve;\n }\n const session = sessionToken.session;\n\n // Remove event listeners\n session.removeEventListener('keystatuseschange', sessionToken);\n session.removeEventListener('message', sessionToken);\n\n // Send our request to the key session\n return session.close();\n }\n\n // This is our main event handler for all desired HTMLMediaElement events\n // related to EME. These events are translated into our API-independent\n // versions of the same events\n function createEventHandler() {\n return {\n handleEvent: function (event) {\n switch (event.type) {\n case 'encrypted':\n if (event.initData) {\n let initData = ArrayBuffer.isView(event.initData) ? event.initData.buffer : event.initData;\n eventBus.trigger(events.NEED_KEY, { key: new NeedKey(initData, event.initDataType) });\n }\n break;\n }\n }\n };\n }\n\n function removeSession(token) {\n // Remove from our session list\n for (let i = 0; i < sessions.length; i++) {\n if (sessions[i] === token) {\n sessions.splice(i, 1);\n break;\n }\n }\n }\n\n function parseKeyStatus(args) {\n // Edge and Chrome implement different version of keystatues, param are not on same order\n let status, keyId;\n if (args && args.length > 0) {\n if (args[0]) {\n if (typeof args[0] === 'string') {\n status = args[0];\n } else {\n keyId = args[0];\n }\n }\n\n if (args[1]) {\n if (typeof args[1] === 'string') {\n status = args[1];\n } else {\n keyId = args[1];\n }\n }\n }\n return {\n status: status,\n keyId: keyId\n };\n }\n\n // Function to create our session token objects which manage the EME\n // MediaKeySession and session-specific event handler\n function createSessionToken(session, ksInfo) {\n const token = { // Implements SessionToken\n session: session,\n keyId: ksInfo.keyId,\n initData: ksInfo.initData,\n sessionId: ksInfo.sessionId,\n sessionType: ksInfo.sessionType,\n\n // This is our main event handler for all desired MediaKeySession events\n // These events are translated into our API-independent versions of the\n // same events\n handleEvent: function (event) {\n switch (event.type) {\n case 'keystatuseschange':\n eventBus.trigger(events.KEY_STATUSES_CHANGED, { data: this });\n event.target.keyStatuses.forEach(function () {\n let keyStatus = parseKeyStatus(arguments);\n switch (keyStatus.status) {\n case 'expired':\n eventBus.trigger(events.INTERNAL_KEY_STATUS_CHANGED, { error: new DashJSError(ProtectionErrors.KEY_STATUS_CHANGED_EXPIRED_ERROR_CODE, ProtectionErrors.KEY_STATUS_CHANGED_EXPIRED_ERROR_MESSAGE) });\n break;\n default:\n eventBus.trigger(events.INTERNAL_KEY_STATUS_CHANGED, keyStatus);\n break;\n }\n });\n break;\n\n case 'message':\n let message = ArrayBuffer.isView(event.message) ? event.message.buffer : event.message;\n eventBus.trigger(events.INTERNAL_KEY_MESSAGE, { data: new KeyMessage(this, message, undefined, event.messageType) });\n break;\n }\n },\n\n getKeyId: function () {\n return this.keyId;\n },\n\n getSessionId: function () {\n return session.sessionId;\n },\n\n getSessionType: function () {\n return this.sessionType;\n },\n\n getExpirationTime: function () {\n return session.expiration;\n },\n\n getKeyStatuses: function () {\n return session.keyStatuses;\n },\n\n getUsable: function () {\n let usable = false;\n session.keyStatuses.forEach(function () {\n let keyStatus = parseKeyStatus(arguments);\n if (keyStatus.status === 'usable') {\n usable = true;\n }\n });\n return usable;\n }\n };\n\n // Add all event listeners\n session.addEventListener('keystatuseschange', token);\n session.addEventListener('message', token);\n\n // Register callback for session closed Promise\n session.closed.then(() => {\n removeSession(token);\n logger.debug('DRM: Session closed. SessionID = ' + token.getSessionId());\n eventBus.trigger(events.KEY_SESSION_CLOSED, { data: token.getSessionId() });\n });\n\n // Add to our session list\n sessions.push(token);\n\n return token;\n }\n\n instance = {\n getAllInitData,\n getSessions,\n requestKeySystemAccess,\n selectKeySystem,\n setMediaElement,\n setServerCertificate,\n createKeySession,\n updateKeySession,\n loadKeySession,\n removeKeySession,\n closeKeySession,\n stop,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nProtectionModel_21Jan2015.__dashjs_factory_name = 'ProtectionModel_21Jan2015';\nexport default dashjs.FactoryMaker.getClassFactory(ProtectionModel_21Jan2015); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * Implementation of the EME APIs as of the 3 Feb 2014 state of the specification.\n *\n * Implemented by Internet Explorer 11 (Windows 8.1)\n *\n * @implements ProtectionModel\n * @class\n */\n\nimport ProtectionKeyController from '../controllers/ProtectionKeyController';\nimport NeedKey from '../vo/NeedKey';\nimport DashJSError from '../../vo/DashJSError';\nimport ProtectionErrors from '../errors/ProtectionErrors';\nimport KeyMessage from '../vo/KeyMessage';\nimport KeySystemConfiguration from '../vo/KeySystemConfiguration';\nimport KeySystemAccess from '../vo/KeySystemAccess';\n\nfunction ProtectionModel_3Feb2014(config) {\n\n config = config || {};\n const context = this.context;\n const eventBus = config.eventBus;//Need to pass in here so we can use same instance since this is optional module\n const events = config.events;\n const debug = config.debug;\n const api = config.api;\n\n let instance,\n logger,\n videoElement,\n keySystem,\n mediaKeys,\n keySystemAccess,\n sessions,\n eventHandler,\n protectionKeyController;\n\n function setup() {\n logger = debug.getLogger(instance);\n videoElement = null;\n keySystem = null;\n mediaKeys = null;\n keySystemAccess = null;\n sessions = [];\n protectionKeyController = ProtectionKeyController(context).getInstance();\n eventHandler = createEventHandler();\n }\n\n function reset() {\n try {\n for (let i = 0; i < sessions.length; i++) {\n closeKeySession(sessions[i]);\n }\n if (videoElement) {\n videoElement.removeEventListener(api.needkey, eventHandler);\n }\n eventBus.trigger(events.TEARDOWN_COMPLETE);\n } catch (error) {\n eventBus.trigger(events.TEARDOWN_COMPLETE, { error: 'Error tearing down key sessions and MediaKeys! -- ' + error.message });\n }\n }\n\n function getAllInitData() {\n const retVal = [];\n for (let i = 0; i < sessions.length; i++) {\n retVal.push(sessions[i].initData);\n }\n return retVal;\n }\n\n function getSessions() {\n return sessions;\n }\n\n function requestKeySystemAccess(ksConfigurations) {\n return new Promise((resolve, reject) => {\n // Try key systems in order, first one with supported key system configuration\n // is used\n let found = false;\n for (let ksIdx = 0; ksIdx < ksConfigurations.length; ksIdx++) {\n const systemString = ksConfigurations[ksIdx].ks.systemString;\n const configs = ksConfigurations[ksIdx].configs;\n let supportedAudio = null;\n let supportedVideo = null;\n\n // Try key system configs in order, first one with supported audio/video\n // is used\n for (let configIdx = 0; configIdx < configs.length; configIdx++) {\n const audios = configs[configIdx].audioCapabilities;\n const videos = configs[configIdx].videoCapabilities;\n\n // Look for supported audio container/codecs\n if (audios && audios.length !== 0) {\n supportedAudio = []; // Indicates that we have a requested audio config\n for (let audioIdx = 0; audioIdx < audios.length; audioIdx++) {\n if (window[api.MediaKeys].isTypeSupported(systemString, audios[audioIdx].contentType)) {\n supportedAudio.push(audios[audioIdx]);\n }\n }\n }\n\n // Look for supported video container/codecs\n if (videos && videos.length !== 0) {\n supportedVideo = []; // Indicates that we have a requested video config\n for (let videoIdx = 0; videoIdx < videos.length; videoIdx++) {\n if (window[api.MediaKeys].isTypeSupported(systemString, videos[videoIdx].contentType)) {\n supportedVideo.push(videos[videoIdx]);\n }\n }\n }\n\n // No supported audio or video in this configuration OR we have\n // requested audio or video configuration that is not supported\n if ((!supportedAudio && !supportedVideo) ||\n (supportedAudio && supportedAudio.length === 0) ||\n (supportedVideo && supportedVideo.length === 0)) {\n continue;\n }\n\n // This configuration is supported\n found = true;\n const ksConfig = new KeySystemConfiguration(supportedAudio, supportedVideo);\n const ks = protectionKeyController.getKeySystemBySystemString(systemString);\n const keySystemAccess = new KeySystemAccess(ks, ksConfig);\n eventBus.trigger(events.KEY_SYSTEM_ACCESS_COMPLETE, { data: keySystemAccess });\n resolve({ data: keySystemAccess });\n break;\n }\n }\n if (!found) {\n const errorMessage = 'Key system access denied! -- No valid audio/video content configurations detected!';\n eventBus.trigger(events.KEY_SYSTEM_ACCESS_COMPLETE, { error: errorMessage });\n reject({ error: errorMessage });\n }\n })\n }\n\n function selectKeySystem(ksAccess) {\n return new Promise((resolve, reject) => {\n try {\n mediaKeys = ksAccess.mediaKeys = new window[api.MediaKeys](ksAccess.keySystem.systemString);\n keySystem = ksAccess.keySystem;\n keySystemAccess = ksAccess;\n if (videoElement) {\n setMediaKeys();\n }\n resolve(keySystem);\n } catch (error) {\n reject({ error: 'Error selecting keys system (' + keySystem.systemString + ')! Could not create MediaKeys -- TODO' });\n }\n })\n }\n\n function setMediaElement(mediaElement) {\n if (videoElement === mediaElement)\n return;\n\n // Replacing the previous element\n if (videoElement) {\n videoElement.removeEventListener(api.needkey, eventHandler);\n }\n\n videoElement = mediaElement;\n\n // Only if we are not detaching from the existing element\n if (videoElement) {\n videoElement.addEventListener(api.needkey, eventHandler);\n if (mediaKeys) {\n setMediaKeys();\n }\n }\n }\n\n function createKeySession(ksInfo) {\n if (!keySystem || !mediaKeys || !keySystemAccess) {\n throw new Error('Can not create sessions until you have selected a key system');\n }\n\n // Use the first video capability for the contentType.\n // TODO: Not sure if there is a way to concatenate all capability data into a RFC6386-compatible format\n\n // If player is trying to playback Audio only stream - don't error out.\n let capabilities = null;\n\n if (keySystemAccess.ksConfiguration.videoCapabilities && keySystemAccess.ksConfiguration.videoCapabilities.length > 0) {\n capabilities = keySystemAccess.ksConfiguration.videoCapabilities[0];\n }\n\n if (capabilities === null && keySystemAccess.ksConfiguration.audioCapabilities && keySystemAccess.ksConfiguration.audioCapabilities.length > 0) {\n capabilities = keySystemAccess.ksConfiguration.audioCapabilities[0];\n }\n\n if (capabilities === null) {\n throw new Error('Can not create sessions for unknown content types.');\n }\n\n const contentType = capabilities.contentType;\n const session = mediaKeys.createSession(contentType, new Uint8Array(ksInfo.initData), ksInfo.cdmData ? new Uint8Array(ksInfo.cdmData) : null);\n const sessionToken = createSessionToken(session, ksInfo);\n\n // Add all event listeners\n session.addEventListener(api.error, sessionToken);\n session.addEventListener(api.message, sessionToken);\n session.addEventListener(api.ready, sessionToken);\n session.addEventListener(api.close, sessionToken);\n\n // Add to our session list\n sessions.push(sessionToken);\n logger.debug('DRM: Session created. SessionID = ' + sessionToken.getSessionId());\n eventBus.trigger(events.KEY_SESSION_CREATED, { data: sessionToken });\n }\n\n function updateKeySession(sessionToken, message) {\n const session = sessionToken.session;\n\n if (!protectionKeyController.isClearKey(keySystem)) {\n // Send our request to the key session\n session.update(new Uint8Array(message));\n } else {\n // For clearkey, message is a ClearKeyKeySet\n session.update(new Uint8Array(message.toJWK()));\n }\n eventBus.trigger(events.KEY_SESSION_UPDATED);\n }\n\n /**\n * Close the given session and release all associated keys. Following\n * this call, the sessionToken becomes invalid\n *\n * @param {Object} sessionToken - the session token\n */\n function closeKeySession(sessionToken) {\n const session = sessionToken.session;\n\n // Remove event listeners\n session.removeEventListener(api.error, sessionToken);\n session.removeEventListener(api.message, sessionToken);\n session.removeEventListener(api.ready, sessionToken);\n session.removeEventListener(api.close, sessionToken);\n\n // Remove from our session list\n for (let i = 0; i < sessions.length; i++) {\n if (sessions[i] === sessionToken) {\n sessions.splice(i, 1);\n break;\n }\n }\n\n // Send our request to the key session\n session[api.release]();\n }\n\n function setServerCertificate(/*serverCertificate*/) { /* Not supported */\n }\n\n function loadKeySession(/*ksInfo*/) { /* Not supported */\n }\n\n function removeKeySession(/*sessionToken*/) { /* Not supported */\n }\n\n\n function createEventHandler() {\n return {\n handleEvent: function (event) {\n switch (event.type) {\n\n case api.needkey:\n if (event.initData) {\n const initData = ArrayBuffer.isView(event.initData) ? event.initData.buffer : event.initData;\n eventBus.trigger(events.NEED_KEY, { key: new NeedKey(initData, 'cenc') });\n }\n break;\n }\n }\n };\n }\n\n\n // IE11 does not let you set MediaKeys until it has entered a certain\n // readyState, so we need this logic to ensure we don't set the keys\n // too early\n function setMediaKeys() {\n let boundDoSetKeys = null;\n const doSetKeys = function () {\n videoElement.removeEventListener('loadedmetadata', boundDoSetKeys);\n videoElement[api.setMediaKeys](mediaKeys);\n eventBus.trigger(events.VIDEO_ELEMENT_SELECTED);\n };\n if (videoElement.readyState >= 1) {\n doSetKeys();\n } else {\n boundDoSetKeys = doSetKeys.bind(this);\n videoElement.addEventListener('loadedmetadata', boundDoSetKeys);\n }\n\n }\n\n // Function to create our session token objects which manage the EME\n // MediaKeySession and session-specific event handler\n function createSessionToken(keySession, ksInfo) {\n return {\n // Implements SessionToken\n session: keySession,\n keyId: ksInfo.keyId,\n initData: ksInfo.initData,\n\n getKeyId: function () {\n return this.keyId;\n },\n\n getSessionId: function () {\n return this.session.sessionId;\n },\n\n getExpirationTime: function () {\n return NaN;\n },\n\n getSessionType: function () {\n return 'temporary';\n },\n\n // This is our main event handler for all desired MediaKeySession events\n // These events are translated into our API-independent versions of the\n // same events\n handleEvent: function (event) {\n switch (event.type) {\n case api.error:\n let errorStr = 'KeyError'; // TODO: Make better string from event\n eventBus.trigger(events.KEY_ERROR, { error: new DashJSError(ProtectionErrors.MEDIA_KEYERR_CODE, errorStr, this) });\n break;\n case api.message:\n let message = ArrayBuffer.isView(event.message) ? event.message.buffer : event.message;\n eventBus.trigger(events.INTERNAL_KEY_MESSAGE, { data: new KeyMessage(this, message, event.destinationURL) });\n break;\n case api.ready:\n logger.debug('DRM: Key added.');\n eventBus.trigger(events.KEY_ADDED);\n break;\n\n case api.close:\n logger.debug('DRM: Session closed. SessionID = ' + this.getSessionId());\n eventBus.trigger(events.KEY_SESSION_CLOSED, { data: this.getSessionId() });\n break;\n }\n }\n };\n }\n\n instance = {\n getAllInitData,\n getSessions,\n requestKeySystemAccess,\n selectKeySystem,\n setMediaElement,\n createKeySession,\n updateKeySession,\n closeKeySession,\n setServerCertificate,\n loadKeySession,\n removeKeySession,\n stop: reset,\n reset\n };\n\n setup();\n\n return instance;\n}\n\nProtectionModel_3Feb2014.__dashjs_factory_name = 'ProtectionModel_3Feb2014';\nexport default dashjs.FactoryMaker.getClassFactory(ProtectionModel_3Feb2014); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * CableLabs ClearKey license server implementation\n *\n * For testing purposes and evaluating potential uses for ClearKey, we have developed\n * a dirt-simple API for requesting ClearKey licenses from a remote server.\n *\n * @implements LicenseServer\n * @class\n */\nimport KeyPair from '../vo/KeyPair';\nimport ClearKeyKeySet from '../vo/ClearKeyKeySet';\n\nfunction ClearKey() {\n\n let instance;\n\n function getServerURLFromMessage(url /* message, messageType*/) {\n return url;\n }\n\n function getHTTPMethod(/*messageType*/) {\n return 'POST';\n }\n\n function getResponseType(/*keySystemStr*/) {\n return 'json';\n }\n\n function getLicenseMessage(serverResponse/*, keySystemStr, messageType*/) {\n if (!serverResponse.hasOwnProperty('keys')) {\n return null;\n }\n let keyPairs = [];\n for (let i = 0; i < serverResponse.keys.length; i++) {\n let keypair = serverResponse.keys[i];\n let keyid = keypair.kid.replace(/=/g, '');\n let key = keypair.k.replace(/=/g, '');\n\n keyPairs.push(new KeyPair(keyid, key));\n }\n return new ClearKeyKeySet(keyPairs);\n }\n\n function getErrorResponse(serverResponse/*, keySystemStr, messageType*/) {\n return String.fromCharCode.apply(null, new Uint8Array(serverResponse));\n }\n\n instance = {\n getServerURLFromMessage,\n getHTTPMethod,\n getResponseType,\n getLicenseMessage,\n getErrorResponse\n };\n\n return instance;\n}\n\nClearKey.__dashjs_factory_name = 'ClearKey';\nexport default dashjs.FactoryMaker.getSingletonFactory(ClearKey); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * CastLabs DRMToday License Server implementation\n *\n * @implements LicenseServer\n * @class\n */\n\nimport ProtectionConstants from '../../constants/ProtectionConstants';\n\nfunction DRMToday(config) {\n\n config = config || {};\n const BASE64 = config.BASE64;\n\n const keySystems = {};\n keySystems[ProtectionConstants.WIDEVINE_KEYSTEM_STRING] = {\n responseType: 'json',\n getLicenseMessage: function (response) {\n return BASE64.decodeArray(response.license);\n },\n getErrorResponse: function (response) {\n return response;\n }\n };\n keySystems[ProtectionConstants.PLAYREADY_KEYSTEM_STRING] = {\n responseType: 'arraybuffer',\n getLicenseMessage: function (response) {\n return response;\n },\n getErrorResponse: function (response) {\n return String.fromCharCode.apply(null, new Uint8Array(response));\n }\n };\n\n let instance;\n\n function checkConfig() {\n if (!BASE64 || !BASE64.hasOwnProperty('decodeArray')) {\n throw new Error('Missing config parameter(s)');\n }\n }\n\n function getServerURLFromMessage(url /*, message, messageType*/) {\n return url;\n }\n\n function getHTTPMethod(/*messageType*/) {\n return 'POST';\n }\n\n function getResponseType(keySystemStr/*, messageType*/) {\n return keySystems[keySystemStr].responseType;\n }\n\n function getLicenseMessage(serverResponse, keySystemStr/*, messageType*/) {\n checkConfig();\n return keySystems[keySystemStr].getLicenseMessage(serverResponse);\n }\n\n function getErrorResponse(serverResponse, keySystemStr/*, messageType*/) {\n return keySystems[keySystemStr].getErrorResponse(serverResponse);\n }\n\n instance = {\n getServerURLFromMessage,\n getHTTPMethod,\n getResponseType,\n getLicenseMessage,\n getErrorResponse\n };\n\n return instance;\n}\n\nDRMToday.__dashjs_factory_name = 'DRMToday';\nexport default dashjs.FactoryMaker.getSingletonFactory(DRMToday); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global escape: true */\n\nimport FactoryMaker from '../../../core/FactoryMaker';\n\n/**\n * Microsoft PlayReady Test License Server\n *\n * For testing content that uses the PlayReady test server at\n *\n * @implements LicenseServer\n * @class\n * @ignore\n */\n\nfunction PlayReady() {\n\n let instance;\n\n const soap = 'http://schemas.xmlsoap.org/soap/envelope/';\n\n function uintToString(arrayBuffer) {\n const encodedString = String.fromCharCode.apply(null, new Uint8Array(arrayBuffer));\n const decodedString = decodeURIComponent(escape(encodedString));\n return decodedString;\n }\n\n function parseServerResponse(serverResponse) {\n if (window.DOMParser) {\n const stringResponse = uintToString(serverResponse);\n const parser = new window.DOMParser();\n const xmlDoc = parser.parseFromString(stringResponse, 'text/xml');\n const envelope = xmlDoc ? xmlDoc.getElementsByTagNameNS(soap, 'Envelope')[0] : null;\n const body = envelope ? envelope.getElementsByTagNameNS(soap, 'Body')[0] : null;\n const fault = body ? body.getElementsByTagNameNS(soap, 'Fault')[0] : null;\n\n if (fault) {\n return null;\n }\n }\n return serverResponse;\n }\n\n function parseErrorResponse(serverResponse) {\n let faultstring = '';\n let statusCode = '';\n let message = '';\n let idStart = -1;\n let idEnd = -1;\n\n if (window.DOMParser) {\n const stringResponse = uintToString(serverResponse);\n const parser = new window.DOMParser();\n const xmlDoc = parser.parseFromString(stringResponse, 'text/xml');\n const envelope = xmlDoc ? xmlDoc.getElementsByTagNameNS(soap, 'Envelope')[0] : null;\n const body = envelope ? envelope.getElementsByTagNameNS(soap, 'Body')[0] : null;\n const fault = body ? body.getElementsByTagNameNS(soap, 'Fault')[0] : null;\n const detail = fault ? fault.getElementsByTagName('detail')[0] : null;\n const exception = detail ? detail.getElementsByTagName('Exception')[0] : null;\n let node = null;\n\n if (fault === null) {\n return stringResponse;\n }\n\n node = fault.getElementsByTagName('faultstring')[0].firstChild;\n faultstring = node ? node.nodeValue : null;\n\n if (exception !== null) {\n node = exception.getElementsByTagName('StatusCode')[0];\n statusCode = node ? node.firstChild.nodeValue : null;\n node = exception.getElementsByTagName('Message')[0];\n message = node ? node.firstChild.nodeValue : null;\n idStart = message ? message.lastIndexOf('[') + 1 : -1;\n idEnd = message ? message.indexOf(']') : -1;\n message = message ? message.substring(idStart, idEnd) : '';\n }\n }\n\n let errorString = `code: ${statusCode}, name: ${faultstring}`;\n if (message) {\n errorString += `, message: ${message}`;\n }\n\n return errorString;\n }\n\n function getServerURLFromMessage(url /*, message, messageType*/) {\n return url;\n }\n\n function getHTTPMethod(/*messageType*/) {\n return 'POST';\n }\n\n function getResponseType(/*keySystemStr, messageType*/) {\n return 'arraybuffer';\n }\n\n function getLicenseMessage(serverResponse/*, keySystemStr, messageType*/) {\n return parseServerResponse.call(this, serverResponse);\n }\n\n function getErrorResponse(serverResponse/*, keySystemStr, messageType*/) {\n return parseErrorResponse.call(this, serverResponse);\n }\n\n instance = {\n getServerURLFromMessage,\n getHTTPMethod,\n getResponseType,\n getLicenseMessage,\n getErrorResponse\n };\n\n return instance;\n}\n\nPlayReady.__dashjs_factory_name = 'PlayReady';\nexport default FactoryMaker.getSingletonFactory(PlayReady); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @ignore\n */\nfunction Widevine() {\n\n let instance;\n\n function getServerURLFromMessage(url /*, message, messageType*/) {\n return url;\n }\n\n function getHTTPMethod(/*messageType*/) {\n return 'POST';\n }\n\n function getResponseType(/*keySystemStr, messageType*/) {\n return 'arraybuffer';\n }\n\n function getLicenseMessage(serverResponse/*, keySystemStr, messageType*/) {\n return serverResponse;\n }\n\n function getErrorResponse(serverResponse/*, keySystemStr, messageType*/) {\n return String.fromCharCode.apply(null, new Uint8Array(serverResponse));\n }\n\n instance = {\n getServerURLFromMessage,\n getHTTPMethod,\n getResponseType,\n getLicenseMessage,\n getErrorResponse\n };\n\n return instance;\n}\n\nWidevine.__dashjs_factory_name = 'Widevine';\nexport default dashjs.FactoryMaker.getSingletonFactory(Widevine); /* jshint ignore:line */\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @classdesc A collection of ClearKey encryption keys with an (optional) associated\n * type\n * @ignore\n */\nclass ClearKeyKeySet {\n /**\n * @param {Array.<KeyPair>} keyPairs\n * @param {string} type the type of keys in this set. One of either 'persistent'\n * or 'temporary'. Can also be null or undefined.\n * @class\n * @ignore\n */\n constructor(keyPairs, type) {\n if (type && type !== 'persistent' && type !== 'temporary')\n throw new Error('Invalid ClearKey key set type! Must be one of \\'persistent\\' or \\'temporary\\'');\n this.keyPairs = keyPairs;\n this.type = type;\n }\n\n /**\n * Convert this key set to its JSON Web Key (JWK) representation\n *\n * @return {ArrayBuffer} JWK object UTF-8 encoded as ArrayBuffer\n */\n toJWK() {\n let i;\n let numKeys = this.keyPairs.length;\n let jwk = {keys: []};\n\n for (i = 0; i < numKeys; i++) {\n let key = {\n kty: 'oct',\n alg: 'A128KW',\n kid: this.keyPairs[i].keyID,\n k: this.keyPairs[i].key\n };\n jwk.keys.push(key);\n }\n if (this.type) {\n jwk.type = this.type;\n }\n let jwkString = JSON.stringify(jwk);\n const len = jwkString.length;\n\n // Convert JSON string to ArrayBuffer\n let buf = new ArrayBuffer(len);\n let bView = new Uint8Array(buf);\n for (i = 0; i < len; i++)\n bView[i] = jwkString.charCodeAt(i);\n return buf;\n }\n}\n\nexport default ClearKeyKeySet;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc EME-independent KeyMessage\n * @ignore\n */\nclass KeyMessage {\n /**\n * @param {SessionToken} sessionToken the session\n * to which the key message is associated\n * @param {ArrayBuffer} message the key message\n * @param {string} defaultURL license acquisition URL provided by the CDM\n * @param {string} messageType Supported message types can be found\n * {@link https://w3c.github.io/encrypted-media/#idl-def-MediaKeyMessageType|here}.\n * @class\n */\n constructor(sessionToken, message, defaultURL, messageType) {\n this.sessionToken = sessionToken;\n this.message = message;\n this.defaultURL = defaultURL;\n this.messageType = messageType ? messageType : 'license-request';\n }\n}\n\nexport default KeyMessage;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc Represents a 128-bit keyID and 128-bit encryption key\n * @ignore\n */\nclass KeyPair {\n /**\n * @param {string} keyID 128-bit key ID, base64 encoded, with no padding\n * @param {string} key 128-bit encryption key, base64 encoded, with no padding\n * @class\n * @ignore\n */\n constructor(keyID, key) {\n this.keyID = keyID;\n this.key = key;\n }\n}\n\nexport default KeyPair;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc Creates a new key system access token. Represents a valid key system for\n * given piece of content and key system requirements. Used to initialize license\n * acquisition operations.\n * @ignore\n */\nclass KeySystemAccess {\n /**\n * @param {MediaPlayer.dependencies.protection.KeySystem} keySystem the key system\n * @param {KeySystemConfiguration} ksConfiguration the\n * subset of configurations passed to the key system access request that are supported\n * by this user agent\n * @class\n * @ignore\n */\n constructor(keySystem, ksConfiguration) {\n this.keySystem = keySystem;\n this.ksConfiguration = ksConfiguration;\n }\n}\n\nexport default KeySystemAccess;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @classdesc Represents a set of configurations that describe the capabilities desired for\n * support by a given CDM\n * @ignore\n */\nclass KeySystemConfiguration {\n /**\n * @param {Array.<MediaCapability>} audioCapabilities array of\n * desired audio capabilities. Higher preference capabilities should be placed earlier\n * in the array.\n * @param {Array.<MediaCapability>} videoCapabilities array of\n * desired video capabilities. Higher preference capabilities should be placed earlier\n * in the array.\n * @param {string} distinctiveIdentifier desired use of distinctive identifiers.\n * One of \"required\", \"optional\", or \"not-allowed\"\n * @param {string} persistentState desired support for persistent storage of\n * key systems. One of \"required\", \"optional\", or \"not-allowed\"\n * @param {Array.<string>} sessionTypes List of session types that must\n * be supported by the key system\n * @class\n */\n constructor(audioCapabilities, videoCapabilities, distinctiveIdentifier, persistentState, sessionTypes) {\n this.initDataTypes = [ 'cenc' ];\n if (audioCapabilities && audioCapabilities.length) {\n this.audioCapabilities = audioCapabilities;\n }\n if (videoCapabilities && videoCapabilities.length) {\n this.videoCapabilities = videoCapabilities;\n }\n this.distinctiveIdentifier = distinctiveIdentifier;\n this.persistentState = persistentState;\n this.sessionTypes = sessionTypes;\n }\n}\n\nexport default KeySystemConfiguration;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc Defines a license request\n * @ignore\n */\nclass LicenseRequest {\n /**\n * Defines a license request\n *\n * @class\n */\n constructor(url, method, responseType, headers, withCredentials, messageType, sessionId, data) {\n\n /**\n * The license request url\n */\n this.url = url;\n\n /**\n * The HTTP method\n */\n this.method = method;\n\n /**\n * The HTTP response type\n */\n this.responseType = responseType;\n\n /**\n * The HTP request headers\n */\n this.headers = headers;\n\n /**\n * Wether request is done using credentials (cross-site cookies)\n */\n this.withCredentials = withCredentials;\n\n /**\n * The license request message type (see https://www.w3.org/TR/encrypted-media/#dom-mediakeymessagetype)\n */\n this.messageType = messageType;\n\n /**\n * The corresponding EME session ID\n */\n this.sessionId = sessionId;\n\n /**\n * The license request data\n */\n this.data = data;\n }\n}\n\nexport default LicenseRequest;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc Defines a license response\n */\nclass LicenseResponse {\n /**\n * Defines a license response\n *\n * @class\n * @ignore\n */\n constructor(url, headers, data) {\n\n /**\n * The url that was loaded, that can be redirected from original request url\n */\n this.url = url;\n\n /**\n * The HTP response headers\n */\n this.headers = headers;\n\n /**\n * The license response data\n */\n this.data = data;\n }\n}\n\nexport default LicenseResponse;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc A media capability\n * @ignore\n */\nclass MediaCapability {\n /**\n * @param {string} contentType MIME type and codecs (RFC6386)\n * @param {string} robustness\n * @class\n * @ignore\n */\n constructor(contentType, robustness) {\n this.contentType = contentType;\n this.robustness = robustness;\n }\n}\n\nexport default MediaCapability;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc NeedKey\n * @ignore\n */\nclass NeedKey {\n /**\n * @param {ArrayBuffer} initData the initialization data\n * @param {string} initDataType initialization data type\n * @class\n */\n constructor(initData, initDataType) {\n this.initData = initData;\n this.initDataType = initDataType;\n }\n}\n\nexport default NeedKey;\n","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @class\n * @ignore\n */\nclass DashJSError {\n constructor(code, message, data) {\n this.code = code || null;\n this.message = message || null;\n this.data = data || null;\n }\n}\n\nexport default DashJSError;","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * @classdesc This Object holds reference to the HTTPRequest for manifest, fragment and xlink loading.\n * Members which are not defined in ISO23009-1 Annex D should be prefixed by a _ so that they are ignored\n * by Metrics Reporting code.\n * @ignore\n */\nclass HTTPRequest {\n /**\n * @class\n */\n constructor() {\n /**\n * Identifier of the TCP connection on which the HTTP request was sent.\n * @public\n */\n this.tcpid = null;\n /**\n * This is an optional parameter and should not be included in HTTP request/response transactions for progressive download.\n * The type of the request:\n * - MPD\n * - XLink expansion\n * - Initialization Fragment\n * - Index Fragment\n * - Media Fragment\n * - Bitstream Switching Fragment\n * - other\n * @public\n */\n this.type = null;\n /**\n * The original URL (before any redirects or failures)\n * @public\n */\n this.url = null;\n /**\n * The actual URL requested, if different from above\n * @public\n */\n this.actualurl = null;\n /**\n * The contents of the byte-range-spec part of the HTTP Range header.\n * @public\n */\n this.range = null;\n /**\n * Real-Time | The real time at which the request was sent.\n * @public\n */\n this.trequest = null;\n /**\n * Real-Time | The real time at which the first byte of the response was received.\n * @public\n */\n this.tresponse = null;\n /**\n * The HTTP response code.\n * @public\n */\n this.responsecode = null;\n /**\n * The duration of the throughput trace intervals (ms), for successful requests only.\n * @public\n */\n this.interval = null;\n /**\n * Throughput traces, for successful requests only.\n * @public\n */\n this.trace = [];\n /**\n * The CMSD static and dynamic values retrieved from CMSD response headers.\n * @public\n */\n this.cmsd = null;\n\n /**\n * Type of stream (\"audio\" | \"video\" etc..)\n * @public\n */\n this._stream = null;\n /**\n * Real-Time | The real time at which the request finished.\n * @public\n */\n this._tfinish = null;\n /**\n * The duration of the media requests, if available, in seconds.\n * @public\n */\n this._mediaduration = null;\n /**\n * The media segment quality\n * @public\n */\n this._quality = null;\n /**\n * all the response headers from request.\n * @public\n */\n this._responseHeaders = null;\n /**\n * The selected service location for the request. string.\n * @public\n */\n this._serviceLocation = null;\n /**\n * The type of the loader that was used. Distinguish between fetch loader and xhr loader\n */\n this._fileLoaderType = null;\n }\n}\n\n/**\n * @classdesc This Object holds reference to the progress of the HTTPRequest.\n * @ignore\n */\nclass HTTPRequestTrace {\n /**\n * @class\n */\n constructor() {\n /**\n * Real-Time | Measurement stream start.\n * @public\n */\n this.s = null;\n /**\n * Measurement stream duration (ms).\n * @public\n */\n this.d = null;\n /**\n * List of integers counting the bytes received in each trace interval within the measurement stream.\n * @public\n */\n this.b = [];\n }\n}\n\nHTTPRequest.GET = 'GET';\nHTTPRequest.HEAD = 'HEAD';\nHTTPRequest.MPD_TYPE = 'MPD';\nHTTPRequest.XLINK_EXPANSION_TYPE = 'XLinkExpansion';\nHTTPRequest.INIT_SEGMENT_TYPE = 'InitializationSegment';\nHTTPRequest.INDEX_SEGMENT_TYPE = 'IndexSegment';\nHTTPRequest.MEDIA_SEGMENT_TYPE = 'MediaSegment';\nHTTPRequest.BITSTREAM_SWITCHING_SEGMENT_TYPE = 'BitstreamSwitchingSegment';\nHTTPRequest.MSS_FRAGMENT_INFO_SEGMENT_TYPE = 'FragmentInfoSegment';\nHTTPRequest.DVB_REPORTING_TYPE = 'DVBReporting';\nHTTPRequest.LICENSE = 'license';\nHTTPRequest.CONTENT_STEERING_TYPE = 'ContentSteering';\nHTTPRequest.OTHER_TYPE = 'other';\n\nexport {HTTPRequest, HTTPRequestTrace};\n","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v1.0.37\n Copyright © 2012-2021 Faisal Salman <f@faisalman.com>\n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '1.0.37',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 500;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n OPERA = 'Opera',\n SAMSUNG = 'Samsung',\n SHARP = 'Sharp',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook',\n CHROMIUM_OS = 'Chromium OS',\n MAC_OS = 'Mac OS';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i<arr.length; i++) {\n enums[arr[i].toUpperCase()] = arr[i];\n }\n return enums;\n },\n has = function (str1, str2) {\n return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;\n },\n lowerize = function (str) {\n return str.toLowerCase();\n },\n majorize = function (version) {\n return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g, EMPTY).split('.')[0] : undefined;\n },\n trim = function (str, len) {\n if (typeof(str) === STR_TYPE) {\n str = str.replace(/^\\s\\s*/, EMPTY);\n return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n }\n };\n\n ///////////////\n // Map helper\n //////////////\n\n var rgxMapper = function (ua, arrays) {\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n if (!regex[j]) { break; }\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i // Baidu\n ], [VERSION, [NAME, 'Baidu']], [\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant|iemobile|slim)\\s?(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(heytap|ovi)browser\\/([\\d\\.]+)/i, // Heytap/Ovi\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /microm.+\\bqbcore\\/([\\w\\.]+)/i, // WeChat Desktop for Windows Built-in Browser\n /\\bqbcore\\/([\\w\\.]+).+microm/i,\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /ya(?:search)?browser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /slbrowser\\/([\\w\\.]+)/i // Smart Lenovo Browser\n ], [VERSION, [NAME, 'Smart Lenovo '+BROWSER]], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ], [[NAME, '360 ' + BROWSER]], [\n /(oculus|sailfish|huawei|vivo)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 ' + BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser\n /samsungbrowser\\/([\\w\\.]+)/i // Samsung Internet\n ], [VERSION, [NAME, SAMSUNG + ' Internet']], [\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /metasr[\\/ ]?([\\d\\.]+)/i // Sogou Explorer\n ], [VERSION, [NAME, 'Sogou Explorer']], [\n /(sogou)mo\\w+\\/([\\d\\.]+)/i // Sogou Mobile\n ], [[NAME, 'Sogou Mobile'], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/2345 Browser\n ], [NAME, VERSION], [\n /(lbbrowser)/i, // LieBao Browser\n /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n ], [NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /(Klarna)\\/([\\w\\.]+)/i, // Klarna Shopping Browser for iOS & Android\n /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i, // Kakao App\n /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i, // Naver InApp\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(alipay)client\\/([\\w\\.]+)/i, // Alipay\n /(chromium|instagram|snapchat)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram/Snapchat\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i // TikTok\n ], [VERSION, [NAME, 'TikTok']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i, // Links\n /panasonic;(viera)/i // Panasonic Viera\n ], [NAME, VERSION], [\n \n /(cobalt)\\/([\\w\\.]+)/i // Cobalt\n ], [NAME, [VERSION, /master.|lts./, \"\"]]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n /(macintosh);/i\n ], [MODEL, [VENDOR, APPLE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i, // Xiaomi Redmi 'numeric' models\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n /oid[^\\)]+; (2\\d{4}(283|rpbf)[cgl])( bui|\\))/i, // Redmi Pad\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i, // Kindle Fire without Silk / Echo Show\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n \n // Ulefone\n /; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(kobo)\\s(ereader|touch)/i, // Kobo\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w+)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i,\n /(aquos-tv[\\w ]+)\\)/i // Sharp\n ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n /(bravia[\\w ]+)( bui|\\))/i // Sony\n ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n /(mitv-\\w{5}) bui/i // Xiaomi\n ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n /Hbbtv.*(technisat) (.*);/i // TechniSAT\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield) bui/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation [345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i // Apple Watch\n ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n /(quest( 2| pro)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n /(aeobc)\\b/i // Echo Dot\n ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i, // iCab\n /\\b(libweb)/i\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i // Windows Phone\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /windows nt 6\\.2; (arm)/i, // Windows RT\n /windows[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i,\n /(?:win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[VERSION, strMapper, windowsVersionMap], [NAME, 'Windows']], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /(?:ios;fbsv\\/|iphone.+ios[\\/ ])([\\d\\.]+)/i,\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS\n ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i // watchOS\n ], [VERSION, [NAME, 'watchOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i // Chromium OS\n ], [[NAME, CHROMIUM_OS], VERSION],[\n\n // Smart TVs\n /panasonic;(viera)/i, // Panasonic Viera\n /(netrange)mmh/i, // Netrange\n /(nettv)\\/(\\d+\\.[\\w\\.]+)/i, // NetTV\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;\n var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);\n var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n var _isSelfNav = _navigator && _navigator.userAgent == _ua;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser[MAJOR] = majorize(_browser[VERSION]);\n // Brave-specific detection\n if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {\n _browser[NAME] = 'Brave';\n }\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {\n _device[TYPE] = MOBILE;\n }\n // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n if (_isSelfNav && _device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {\n _device[MODEL] = 'iPad';\n _device[TYPE] = TABLET;\n }\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n if (_isSelfNav && !_os[NAME] && _uach && _uach.platform != 'Unknown') {\n _os[NAME] = _uach.platform \n .replace(/chrome os/i, CHROMIUM_OS)\n .replace(/macos/i, MAC_OS); // backward compatibility\n }\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2013, Dash Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * * Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\nimport ProtectionController from './controllers/ProtectionController';\nimport ProtectionKeyController from './controllers/ProtectionKeyController';\nimport ProtectionEvents from './ProtectionEvents';\nimport ProtectionErrors from './errors/ProtectionErrors';\nimport ProtectionModel_21Jan2015 from './models/ProtectionModel_21Jan2015';\nimport ProtectionModel_3Feb2014 from './models/ProtectionModel_3Feb2014';\nimport ProtectionModel_01b from './models/ProtectionModel_01b';\n\nconst APIS_ProtectionModel_01b = [\n // Un-prefixed as per spec\n {\n // Video Element\n generateKeyRequest: 'generateKeyRequest',\n addKey: 'addKey',\n cancelKeyRequest: 'cancelKeyRequest',\n\n // Events\n needkey: 'needkey',\n keyerror: 'keyerror',\n keyadded: 'keyadded',\n keymessage: 'keymessage'\n },\n // Webkit-prefixed (early Chrome versions and Chrome with EME disabled in chrome://flags)\n {\n // Video Element\n generateKeyRequest: 'webkitGenerateKeyRequest',\n addKey: 'webkitAddKey',\n cancelKeyRequest: 'webkitCancelKeyRequest',\n\n // Events\n needkey: 'webkitneedkey',\n keyerror: 'webkitkeyerror',\n keyadded: 'webkitkeyadded',\n keymessage: 'webkitkeymessage'\n }\n];\n\nconst APIS_ProtectionModel_3Feb2014 = [\n // Un-prefixed as per spec\n // Chrome 38-39 (and some earlier versions) with chrome://flags -- Enable Encrypted Media Extensions\n {\n // Video Element\n setMediaKeys: 'setMediaKeys',\n // MediaKeys\n MediaKeys: 'MediaKeys',\n // MediaKeySession\n release: 'close',\n\n // Events\n needkey: 'needkey',\n error: 'keyerror',\n message: 'keymessage',\n ready: 'keyadded',\n close: 'keyclose'\n },\n // MS-prefixed (IE11, Windows 8.1)\n {\n // Video Element\n setMediaKeys: 'msSetMediaKeys',\n // MediaKeys\n MediaKeys: 'MSMediaKeys',\n // MediaKeySession\n release: 'close',\n // Events\n needkey: 'msneedkey',\n error: 'mskeyerror',\n message: 'mskeymessage',\n ready: 'mskeyadded',\n close: 'mskeyclose'\n }\n];\n\nfunction Protection() {\n let instance;\n const context = this.context;\n\n /**\n * Create a ProtectionController and associated ProtectionModel for use with\n * a single piece of content.\n *\n * @param {Object} config\n * @return {ProtectionController} protection controller\n *\n */\n function createProtectionSystem(config) {\n let controller = null;\n\n const protectionKeyController = ProtectionKeyController(context).getInstance();\n protectionKeyController.setConfig({ debug: config.debug, BASE64: config.BASE64, settings: config.settings });\n protectionKeyController.initialize();\n\n let protectionModel = _getProtectionModel(config);\n\n if (!controller && protectionModel) {//TODO add ability to set external controller if still needed at all?\n controller = ProtectionController(context).create({\n protectionModel: protectionModel,\n protectionKeyController: protectionKeyController,\n eventBus: config.eventBus,\n debug: config.debug,\n events: config.events,\n BASE64: config.BASE64,\n constants: config.constants,\n cmcdModel: config.cmcdModel,\n customParametersModel: config.customParametersModel,\n settings: config.settings\n });\n config.capabilities.setEncryptedMediaSupported(true);\n }\n return controller;\n }\n\n function _getProtectionModel(config) {\n const debug = config.debug;\n const logger = debug.getLogger(instance);\n const eventBus = config.eventBus;\n const errHandler = config.errHandler;\n const videoElement = config.videoModel ? config.videoModel.getElement() : null;\n\n if ((!videoElement || videoElement.onencrypted !== undefined) &&\n (!videoElement || videoElement.mediaKeys !== undefined)) {\n logger.info('EME detected on this user agent! (ProtectionModel_21Jan2015)');\n return ProtectionModel_21Jan2015(context).create({\n debug: debug,\n eventBus: eventBus,\n events: config.events\n });\n } else if (_getAPI(videoElement, APIS_ProtectionModel_3Feb2014)) {\n logger.info('EME detected on this user agent! (ProtectionModel_3Feb2014)');\n return ProtectionModel_3Feb2014(context).create({\n debug: debug,\n eventBus: eventBus,\n events: config.events,\n api: _getAPI(videoElement, APIS_ProtectionModel_3Feb2014)\n });\n } else if (_getAPI(videoElement, APIS_ProtectionModel_01b)) {\n logger.info('EME detected on this user agent! (ProtectionModel_01b)');\n return ProtectionModel_01b(context).create({\n debug: debug,\n eventBus: eventBus,\n errHandler: errHandler,\n events: config.events,\n api: _getAPI(videoElement, APIS_ProtectionModel_01b)\n });\n } else {\n logger.warn('No supported version of EME detected on this user agent! - Attempts to play encrypted content will fail!');\n return null;\n }\n }\n\n function _getAPI(videoElement, apis) {\n for (let i = 0; i < apis.length; i++) {\n const api = apis[i];\n // detect if api is supported by browser\n // check only first function in api -> should be fine\n if (typeof videoElement[api[Object.keys(api)[0]]] !== 'function') {\n continue;\n }\n\n return api;\n }\n\n return null;\n }\n\n instance = {\n createProtectionSystem\n };\n\n return instance;\n}\n\nProtection.__dashjs_factory_name = 'Protection';\nconst factory = dashjs.FactoryMaker.getClassFactory(Protection); /* jshint ignore:line */\nfactory.events = ProtectionEvents;\nfactory.errors = ProtectionErrors;\ndashjs.FactoryMaker.updateClassFactory(Protection.__dashjs_factory_name, factory); /* jshint ignore:line */\nexport default factory;\n"],"names":["FactoryMaker","instance","singletonContexts","singletonFactories","classFactories","extend","name","childInstance","override","context","getSingletonInstance","className","i","obj","setSingletonInstance","push","deleteSingletonInstances","filter","x","getFactoryByName","factoriesArray","updateFactory","factory","updateClassFactory","getClassFactoryByName","getClassFactory","classConstructor","__dashjs_factory_name","undefined","create","merge","arguments","updateSingletonFactory","getSingletonFactoryByName","getSingletonFactory","getInstance","args","classInstance","extensionObject","extension","apply","parent","prop","hasOwnProperty","getClassName","path","UAParser","Utils","dest","source","copy","s","empty","mixin","src","r","Array","l","length","clone","url","params","modifiedUrl","URL","forEach","param","key","value","searchParams","set","href","e","headerStr","headers","headerPairs","trim","split","ilen","headerPair","index","indexOf","substring","dt","Date","getTime","uuid","replace","c","Math","random","floor","toString","string","hash","chr","charCodeAt","originalUrl","targetUrl","original","target","protocol","origin","relativePath","relative","pathname","substr","lastIndexOf","startIndexOffset","ua","uaString","navigator","userAgent","toLowerCase","test","ErrorsBase","errors","config","publicOnly","err","EventsBase","events","evt","Constants","init","STREAM","VIDEO","AUDIO","TEXT","MUXED","IMAGE","STPP","TTML","VTT","WVTT","CONTENT_STEERING","ABR_STRATEGY_DYNAMIC","ABR_STRATEGY_BOLA","ABR_STRATEGY_L2A","ABR_STRATEGY_LoLP","ABR_STRATEGY_THROUGHPUT","ABR_FETCH_THROUGHPUT_CALCULATION_DOWNLOADED_DATA","ABR_FETCH_THROUGHPUT_CALCULATION_MOOF_PARSING","ABR_FETCH_THROUGHPUT_CALCULATION_AAST","LIVE_CATCHUP_MODE_DEFAULT","LIVE_CATCHUP_MODE_LOLP","MOVING_AVERAGE_SLIDING_WINDOW","MOVING_AVERAGE_EWMA","BAD_ARGUMENT_ERROR","MISSING_CONFIG_ERROR","TRACK_SWITCH_MODE_ALWAYS_REPLACE","TRACK_SWITCH_MODE_NEVER_REPLACE","TRACK_SELECTION_MODE_FIRST_TRACK","TRACK_SELECTION_MODE_HIGHEST_BITRATE","TRACK_SELECTION_MODE_HIGHEST_EFFICIENCY","TRACK_SELECTION_MODE_WIDEST_RANGE","TRACK_SELECTION_MODE_HIGHEST_SELECTION_PRIORITY","CMCD_MODE_QUERY","CMCD_MODE_HEADER","INITIALIZE","TEXT_SHOWING","TEXT_HIDDEN","TEXT_DISABLED","CC1","CC3","UTF8","SCHEME_ID_URI","START_TIME","SERVICE_DESCRIPTION_DVB_LL_SCHEME","SUPPLEMENTAL_PROPERTY_DVB_LL_SCHEME","FONT_DOWNLOAD_DVB_SCHEME","XML","ARRAY_BUFFER","DVB_REPORTING_URL","DVB_PROBABILITY","OFF_MIMETYPE","WOFF_MIMETYPE","VIDEO_ELEMENT_READY_STATES","HAVE_NOTHING","HAVE_METADATA","HAVE_CURRENT_DATA","HAVE_FUTURE_DATA","HAVE_ENOUGH_DATA","FILE_LOADER_TYPES","FETCH","XHR","constants","ProtectionConstants","CLEARKEY_KEYSTEM_STRING","WIDEVINE_KEYSTEM_STRING","PLAYREADY_KEYSTEM_STRING","PLAYREADY_RECOMMENDATION_KEYSTEM_STRING","INITIALIZATION_DATA_TYPE_CENC","INITIALIZATION_DATA_TYPE_KEYIDS","INITIALIZATION_DATA_TYPE_WEBM","LICENSE_SERVER_MANIFEST_CONFIGURATIONS","attributes","prefixes","CommonEncryption","cpArray","retVal","cp","schemeIdUri","pssh","offset","view","DataView","version","getUint8","getUint32","slice","keySystem","initData","psshList","parsePSSHList","cpData","BASE64","__text","decodeArray","buffer","data","dv","done","byteCursor","size","nextBox","systemID","boxStart","byteLength","val","mediaInfo","licenseServer","info","contentProtection","targetProtectionData","j","ckData","k","attribute","prefix","__prefix","ProtectionEvents","INTERNAL_KEY_MESSAGE","INTERNAL_KEY_STATUS_CHANGED","KEY_ADDED","KEY_ERROR","KEY_MESSAGE","KEY_SESSION_CLOSED","KEY_SESSION_CREATED","KEY_SESSION_REMOVED","KEY_STATUSES_CHANGED","KEY_SYSTEM_ACCESS_COMPLETE","KEY_SYSTEM_SELECTED","LICENSE_REQUEST_COMPLETE","LICENSE_REQUEST_SENDING","NEED_KEY","PROTECTION_CREATED","PROTECTION_DESTROYED","SERVER_CERTIFICATE_UPDATED","TEARDOWN_COMPLETE","VIDEO_ELEMENT_SELECTED","KEY_SESSION_UPDATED","protectionEvents","MediaCapability","KeySystemConfiguration","ProtectionErrors","DashJSError","LicenseRequest","LicenseResponse","HTTPRequest","NEEDKEY_BEFORE_INITIALIZE_RETRIES","NEEDKEY_BEFORE_INITIALIZE_TIMEOUT","LICENSE_SERVER_REQUEST_RETRIES","LICENSE_SERVER_REQUEST_RETRY_INTERVAL","LICENSE_SERVER_REQUEST_DEFAULT_TIMEOUT","ProtectionController","protectionKeyController","protectionModel","eventBus","debug","needkeyRetries","cmcdModel","settings","customParametersModel","logger","pendingKeySessionsToHandle","mediaInfoArr","protDataSet","sessionType","robustnessLevel","selectedKeySystem","keySystemSelectionInProgress","licenseXhrRequest","licenseRequestRetryTimeout","setup","getLogger","on","_onKeyMessage","_onKeyStatusChanged","checkConfig","Error","initializeForMedia","handleKeySystemFromManifest","supportedKeySystems","mInfo","currentKs","getSupportedKeySystemsFromContentProtection","_selectKeySystemOrUpdateKeySessions","_handleKeySystemFromPssh","supportedKs","fromManifest","_selectInitialKeySystem","_handleKeySessions","requestedKeySystems","sort","ksA","ksB","indexA","ks","systemString","priority","indexB","keySystemConfiguration","_getKeySystemConfiguration","configs","protData","keySystemAccess","requestKeySystemAccess","then","event","selectedSystemString","mksa","selectKeySystem","trigger","_getProtDataForKeySystem","serverCertificate","setServerCertificate","error","KEY_SYSTEM_ACCESS_DENIED_ERROR_CODE","KEY_SYSTEM_ACCESS_DENIED_ERROR_MESSAGE","ksIdx","current","_loadOrCreateKeySession","keySystemInfo","isClearKey","Object","keys","clearkeys","kids","TextEncoder","encode","JSON","stringify","sessionId","loadKeySession","createKeySession","initDataForKS","getPSSHForKeySystem","_isKeyIdDuplicate","keyId","_isInitDataDuplicate","KEY_SESSION_CREATED_ERROR_CODE","KEY_SESSION_CREATED_ERROR_MESSAGE","message","keySystemString","clearMediaInfoArray","cps","sessions","getSessions","getKeyId","currentInitData","getAllInitData","initDataEquals","removeKeySession","sessionToken","closeKeySession","setMediaElement","element","_onNeedKey","off","setSessionType","setRobustnessLevel","level","setProtectionData","stop","_abortLicenseRequest","reset","retryTimeout","clearTimeout","keySystemData","audioCapabilities","videoCapabilities","audioRobustness","videoRobustness","ksSessionType","distinctiveIdentifier","persistentState","media","type","codec","status","keyMessage","messageType","licenseServerModelInstance","getLicenseServerModelInstance","eventData","_sendLicenseRequestCompleteEvent","MEDIA_KEY_MESSAGE_NO_CHALLENGE_ERROR_CODE","MEDIA_KEY_MESSAGE_NO_CHALLENGE_ERROR_MESSAGE","getSessionId","processClearKeyLicenseRequest","keyPairs","updateKeySession","_issueLicenseRequest","licenseServerData","_getLicenseServerUrl","MEDIA_KEY_MESSAGE_NO_LICENSE_SERVER_URL_ERROR_CODE","MEDIA_KEY_MESSAGE_NO_LICENSE_SERVER_URL_ERROR_MESSAGE","reqHeaders","withCredentials","_updateHeaders","httpRequestHeaders","headersFromMessage","getRequestHeadersFromMessage","onLoad","xhr","responseHeaders","parseHttpHeaders","getAllResponseHeaders","licenseResponse","responseURL","response","licenseResponseFilters","getLicenseResponseFilters","_applyFilters","licenseMessage","getLicenseMessage","_reportError","onAbort","MEDIA_KEY_MESSAGE_LICENSER_ERROR_CODE","MEDIA_KEY_MESSAGE_LICENSER_ERROR_MESSAGE","statusText","readyState","onError","reqPayload","getLicenseRequestFromMessage","reqMethod","getHTTPMethod","responseType","getResponseType","timeout","isNaN","httpTimeout","licenseRequest","retryAttempts","get","streaming","LICENSE","licenseRequestFilters","getLicenseRequestFilters","_doLicenseRequest","request","retriesCount","XMLHttpRequest","cmcd","enabled","cmcdMode","mode","cmcdParams","getQueryParameter","addAditionalQueryParameterToUrl","open","method","setRequestHeader","cmcdHeaders","getHeaderParameters","header","_retryRequest","retryInterval","retryIntervals","setTimeout","onload","warn","ontimeout","onerror","onabort","payload","send","onloadend","onprogress","abort","serverURL","laURL","getLicenseServerUrlFromMediaInfo","schemeIdURI","psshData","getPSSHData","getLicenseServerURLFromInitData","getServerURLFromMessage","errorMsg","getErrorResponse","serverResponse","responseCode","responseText","filters","Promise","resolve","reduce","prev","next","retry","protection","ignoreEmeEncryptedEvent","initDataType","abInitData","ArrayBuffer","isView","String","fromCharCode","Uint8Array","getSupportedKeySystemsFromSegmentPssh","getKeySystems","setKeySystems","keySystems","KeySystemClearKey","KeySystemW3CClearKey","KeySystemWidevine","KeySystemPlayReady","DRMToday","PlayReady","Widevine","ClearKey","ProtectionKeyController","clearkeyKeySystem","clearkeyW3CKeySystem","setConfig","initialize","newKeySystems","getKeySystemBySystemString","initData1","initData2","data1","data2","cpIdx","supportedKS","cencContentProtection","findCencContentProtection","getInitData","cdmData","getCDMData","_getSessionId","_getSessionType","getClearKeysFromProtectionData","protectionDataSet","getProtectionData","dashjs","KeyPair","ClearKeyKeySet","protectionData","clearkeySet","jsonMsg","parse","clearkeyID","clearkey","parseInitDataFromContentProtection","cencDefaultKid","cencDefaultKidToBase64Representation","kid","btoa","match","map","a","parseInt","join","PRCDMData","messageFormat","msg","xmlDoc","parser","DOMParser","detectPlayreadyMessageFormat","dataview","Uint16Array","parseFromString","headerNameList","getElementsByTagName","headerValueList","childNodes","nodeValue","Content","Challenge","decode","numRecords","getUint16","recordType","recordLength","recordData","record","laurl","luiurl","PSSHBoxType","playreadySystemID","uint8arraydecodedPROHeader","PROSize","PSSHSize","PSSHBoxBuffer","PSSHBox","PSSHData","pro","prheader","setUint32","setPlayReadyMessageFormat","format","_cdmData","customData","cdmDataBytes","MEDIA_KEYERR_CODE","MEDIA_KEYERR_UNKNOWN_CODE","MEDIA_KEYERR_CLIENT_CODE","MEDIA_KEYERR_SERVICE_CODE","MEDIA_KEYERR_OUTPUT_CODE","MEDIA_KEYERR_HARDWARECHANGE_CODE","MEDIA_KEYERR_DOMAIN_CODE","MEDIA_KEY_MESSAGE_ERROR_CODE","SERVER_CERTIFICATE_UPDATED_ERROR_CODE","KEY_STATUS_CHANGED_EXPIRED_ERROR_CODE","MEDIA_KEYERR_UNKNOWN_MESSAGE","MEDIA_KEYERR_CLIENT_MESSAGE","MEDIA_KEYERR_SERVICE_MESSAGE","MEDIA_KEYERR_OUTPUT_MESSAGE","MEDIA_KEYERR_HARDWARECHANGE_MESSAGE","MEDIA_KEYERR_DOMAIN_MESSAGE","MEDIA_KEY_MESSAGE_ERROR_MESSAGE","SERVER_CERTIFICATE_UPDATED_ERROR_MESSAGE","KEY_STATUS_CHANGED_EXPIRED_ERROR_MESSAGE","protectionErrors","NeedKey","KeyMessage","KeySystemAccess","ProtectionModel_01b","api","errHandler","videoElement","pendingSessions","moreSessionsAllowed","eventHandler","createEventHandler","removeEventListeners","concat","ksConfigurations","reject","ve","document","createElement","found","supportedAudio","supportedVideo","configIdx","videos","videoIdx","canPlayType","contentType","ksConfig","errorMessage","mediaElement","addEventListener","keyerror","needkey","keymessage","keyadded","ksInfo","newSession","getExpirationTime","NaN","getSessionType","generateKeyRequest","addKey","keyID","cancelKeyRequest","handleEvent","findSessionByID","code","errorCode","systemCode","shift","defaultURL","sessionArray","len","removeEventListener","SYSTEM_STRING_PRIORITY","ProtectionModel_21Jan2015","mediaKeys","numSessions","session","removeSession","setMediaKeys","_closeKeySessionInternal","getUsable","_requestKeySystemAccessInternal","idx","requestMediaKeySystemAccess","protDataSystemStringPriority","systemStringPriority","currentKeySystem","systemStringsToApply","_checkAccessForKeySystem","mediaKeySystemAccess","configuration","getConfiguration","_checkAccessForSystemStrings","createMediaKeys","mkeys","createSession","createSessionToken","dataType","generateRequest","toJWK","update","load","success","remove","close","token","splice","parseKeyStatus","keyStatuses","keyStatus","expiration","getKeyStatuses","usable","closed","ProtectionModel_3Feb2014","audios","audioIdx","window","MediaKeys","isTypeSupported","ksAccess","capabilities","ksConfiguration","ready","release","boundDoSetKeys","doSetKeys","bind","keySession","errorStr","destinationURL","keypair","keyid","license","keySystemStr","soap","uintToString","arrayBuffer","encodedString","decodedString","decodeURIComponent","escape","parseServerResponse","stringResponse","envelope","getElementsByTagNameNS","body","fault","parseErrorResponse","faultstring","statusCode","idStart","idEnd","detail","exception","node","firstChild","errorString","call","numKeys","jwk","kty","alg","jwkString","buf","bView","sessionTypes","initDataTypes","robustness","tcpid","actualurl","range","trequest","tresponse","responsecode","interval","trace","cmsd","_stream","_tfinish","_mediaduration","_quality","_responseHeaders","_serviceLocation","_fileLoaderType","HTTPRequestTrace","d","b","GET","HEAD","MPD_TYPE","XLINK_EXPANSION_TYPE","INIT_SEGMENT_TYPE","INDEX_SEGMENT_TYPE","MEDIA_SEGMENT_TYPE","BITSTREAM_SWITCHING_SEGMENT_TYPE","MSS_FRAGMENT_INFO_SEGMENT_TYPE","DVB_REPORTING_TYPE","CONTENT_STEERING_TYPE","OTHER_TYPE","APIS_ProtectionModel_01b","APIS_ProtectionModel_3Feb2014","Protection","createProtectionSystem","controller","_getProtectionModel","setEncryptedMediaSupported","videoModel","getElement","onencrypted","_getAPI","apis"],"sourceRoot":""}