diff --git a/README.md b/README.md index 0af95894b..c4ae19adc 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Rollbar.js -[![Build Status](https://api.travis-ci.org/rollbar/rollbar.js.png?branch=v2.6.0)](https://travis-ci.org/rollbar/rollbar.js) +[![Build Status](https://api.travis-ci.org/rollbar/rollbar.js.png?branch=v2.6.1)](https://travis-ci.org/rollbar/rollbar.js) [![Code Quality: Javascript](https://img.shields.io/lgtm/grade/javascript/g/rollbar/rollbar.js.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/rollbar/rollbar.js/context:javascript) [![Total Alerts](https://img.shields.io/lgtm/alerts/g/rollbar/rollbar.js.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/rollbar/rollbar.js/alerts) diff --git a/dist/rollbar.js b/dist/rollbar.js index 79edf05db..7632b4cc0 100644 --- a/dist/rollbar.js +++ b/dist/rollbar.js @@ -504,7 +504,7 @@ /* global __DEFAULT_ENDPOINT__:false */ var defaultOptions = { - version: ("2.6.0"), + version: ("2.6.1"), scrubFields: (["pw","pass","passwd","password","secret","confirm_password","confirmPassword","password_confirmation","passwordConfirmation","access_token","accessToken","secret_key","secretKey","secretToken","cc-number","card number","cardnumber","cardnum","ccnum","ccnumber","cc num","creditcardnumber","credit card number","newcreditcardnumber","new credit card","creditcardno","credit card no","card#","card #","cc-csc","cvc2","cvv2","ccv2","security code","card verification","name on credit card","name on card","nameoncard","cardholder","card holder","name des karteninhabers","card type","cardtype","cc type","cctype","payment type","expiration date","expirationdate","expdate","cc-exp"]), logLevel: ("debug"), reportLevel: ("debug"), diff --git a/dist/rollbar.js.map b/dist/rollbar.js.map index 405a916b5..0643153ed 100644 --- a/dist/rollbar.js.map +++ b/dist/rollbar.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 975d446182622cbbe30e","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/utility.js","webpack:///./src/merge.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/queue.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/truncation.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;;;;;;;ACvBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3bA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;;;;;;;AC3JA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChJA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB;AACA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oCAAmC,OAAO;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;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,oDAAmD,SAAS;AAC5D;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,aAAa;AAChC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACztBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;;AAEA,YAAW,YAAY;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClLA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACjGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtHA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AChIA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC7PA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACjQA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3GA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC,sBAAsB;AAC1D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iDAAgD,aAAa;AAC7D;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA,iBAAgB,cAAc;AAC9B,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;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,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;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,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrlBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 975d446182622cbbe30e","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 0\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 4\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 5\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap 13e0acc2c3d7648ab1c1","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/utility.js","webpack:///./src/merge.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/queue.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/truncation.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;;;;;;;ACvBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3bA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;;;;;;;AC3JA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChJA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB;AACA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oCAAmC,OAAO;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;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,oDAAmD,SAAS;AAC5D;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,aAAa;AAChC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACztBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;;AAEA,YAAW,YAAY;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClLA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACjGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtHA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AChIA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC7PA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACjQA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3GA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC,sBAAsB;AAC1D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iDAAgD,aAAa;AAC7D;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA,iBAAgB,cAAc;AAC9B,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;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,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;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,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrlBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 13e0acc2c3d7648ab1c1","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 0\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 4\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 5\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/rollbar.min.js b/dist/rollbar.min.js index c076d819a..ddb79f615 100644 --- a/dist/rollbar.min.js +++ b/dist/rollbar.min.js @@ -1,3 +1,3 @@ -!function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";var n=r(1),o="undefined"!=typeof window&&window._rollbarConfig,i=o&&o.globalAlias||"Rollbar",a="undefined"!=typeof window&&window[i]&&"function"==typeof window[i].shimId&&void 0!==window[i].shimId();if("undefined"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),!a&&o){var s=new n(o);window[i]=s}else"undefined"!=typeof window?(window.rollbar=n,window._rollbarDidLoad=!0):"undefined"!=typeof self&&(self.rollbar=n,self._rollbarDidLoad=!0);t.exports=n},function(t,e,r){"use strict";function n(t,e){this.options=c.handleOptions(x,t);var r=new l(this.options,h,d);this.client=e||new u(this.options,r,p,"browser");var n="undefined"!=typeof window&&window||"undefined"!=typeof self&&self,o="undefined"!=typeof document&&document;i(this.client.notifier,n),a(this.client.queue),(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(f.captureUncaughtExceptions(n,this),f.wrapGlobals(n,this)),(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&f.captureUnhandledRejections(n,this),this.instrumenter=new w(this.options,this.client.telemeter,this,n,o),this.instrumenter.instrument()}function o(t){var e="Rollbar is not initialized";p.error(e),t&&t(new Error(e))}function i(t,e){t.addTransform(m.handleItemWithError).addTransform(m.ensureItemHasSomethingToSay).addTransform(m.addBaseInfo).addTransform(m.addRequestInfo(e)).addTransform(m.addClientInfo(e)).addTransform(m.addPluginInfo(e)).addTransform(m.addBody).addTransform(g.addMessageWithError).addTransform(g.addTelemetryData).addTransform(g.addConfigToPayload).addTransform(m.scrubPayload).addTransform(g.userTransform(p)).addTransform(g.itemToPayload)}function a(t){t.addPredicate(y.checkLevel).addPredicate(v.checkIgnore).addPredicate(y.userCheckIgnore(p)).addPredicate(y.urlIsNotBlacklisted(p)).addPredicate(y.urlIsWhitelisted(p)).addPredicate(y.messageIsIgnored(p))}function s(t){for(var e=0,r=t.length;e=1&&r>e}function i(t,e,r,n,o,i,s){var u=null;return r&&(r=new Error(r)),r||n||(u=a(t,e,o,i,s)),{error:r,shouldSend:n,payload:u}}function a(t,e,r,n,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:r,itemsPerMinute:n}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}var s=r(4);n.globalSettings={startTime:s.now(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||s.now();var r=e-this.startTime;(r<0||r>=6e4)&&(this.startTime=e,this.perMinCounter=0);var a=n.globalSettings.maxItems,u=n.globalSettings.itemsPerMinute;if(o(t,a,this.counter))return i(this.platform,this.platformOptions,a+" max items reached",!1);if(o(t,u,this.perMinCounter))return i(this.platform,this.platformOptions,u+" items per minute reached",!1);this.counter++,this.perMinCounter++;var c=!o(t,a,this.counter),l=c;return c=c&&!o(t,u,this.perMinCounter),i(this.platform,this.platformOptions,null,c,a,u,l)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,r){"use strict";function n(){if(!q&&(q=!0,c(JSON)&&(s(JSON.stringify)&&(F.stringify=JSON.stringify),s(JSON.parse)&&(F.parse=JSON.parse)),!a(F.stringify)||!a(F.parse))){var t=r(6);t(F)}}function o(t,e){return e===i(t)}function i(t){var e=typeof t;return"object"!==e?e:t?t instanceof Error?"error":{}.toString.call(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase():"null"}function a(t){return o(t,"function")}function s(t){var e=/[\\^$.*+?()[\]{}|]/g,r=Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?"),n=RegExp("^"+r+"$");return u(t)&&n.test(t)}function u(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function c(t){return!o(t,"undefined")}function l(t){var e=i(t);return"object"===e||"array"===e}function p(t){return o(t,"error")||o(t,"exception")}function f(t,e,r){var n,i,a,s=o(t,"object"),u=o(t,"array"),c=[];if(s&&r.indexOf(t)!==-1)return t;if(r.push(t),s)for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&c.push(n);else if(u)for(a=0;as)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var r=e+"//"+t.hostname;return t.port&&(r=r+":"+t.port),t.path&&(r+=t.path),r}function b(t,e){var r,n;try{r=F.stringify(t)}catch(o){if(e&&a(e))try{r=e(t)}catch(t){n=t}else n=o}return{error:n,value:r}}function w(t){var e,r;try{e=F.parse(t)}catch(t){r=t}return{error:r,value:e}}function _(t,e,r,n,o,i,a,s){var u={url:e||"",line:r,column:n};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(r,n){try{e(r,n)}catch(e){t.error(e)}}}function k(t,e,r,n,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=A(u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:P(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),n&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){for(var r=0;r500&&(n=n.substr(0,497)+"...");break;case"null":n="null";break;case"undefined":n="undefined";break;case"symbol":n=n.toString()}o.push(n)}return o.join(" ")}function P(){return Date.now?+Date.now():+new Date}function R(t,e){if(t&&t.user_ip&&e!==!0){var r=t.user_ip;if(e)try{var n;if(r.indexOf(".")!==-1)n=r.split("."),n.pop(),n.push("0"),r=n.join(".");else if(r.indexOf(":")!==-1){if(n=r.split(":"),n.length>2){var o=n.slice(0,3),i=o[2].indexOf("/");i!==-1&&(o[2]=o[2].substring(0,i));var a="0000:0000:0000:0000:0000";r=o.concat(a).join(":")}}else r=null}catch(t){r=null}else r=null;t.user_ip=r}}function j(t,e,r){var n=A(t,e,r);return!e||e.overwriteScrubFields?n:(e.scrubFields&&(n.scrubFields=(t.scrubFields||[]).concat(e.scrubFields)),n)}var A=r(5),F={},q=!1;n();var D={debug:0,info:1,warning:2,error:3,critical:4},M={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},U=["log","network","dom","navigation","error","manual"],H=["critical","error","warning","info","debug"];t.exports={addParamsAndAccessTokenToPath:v,createItem:k,createTelemetryEvent:I,filterIp:R,formatArgsAsString:C,formatUrl:y,get:T,handleOptions:j,isError:p,isFunction:a,isIterable:l,isNativeFunction:s,isType:o,jsonParse:w,LEVELS:D,makeUnhandledStackInfo:_,merge:A,now:P,redact:h,sanitizeUrl:m,scrub:O,set:S,stringify:b,traverse:f,typeName:i,uuid4:d}},function(t,e){"use strict";function r(){var t,e,n,o,a,s={},u=null,c=arguments.length;for(t=0;tn&&(o=this.maxQueueSize-n),this.maxQueueSize=n,this.queue.splice(0,o)},n.prototype.copyEvents=function(){var t=Array.prototype.slice.call(this.queue,0);if(i.isFunction(this.options.filterTelemetry))try{for(var e=t.length;e--;)this.options.filterTelemetry(t[e])&&t.splice(e,1)}catch(t){this.options.filterTelemetry=null}return t},n.prototype.capture=function(t,e,r,n,a){var s={level:o(t,r),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};n&&(s.uuid=n);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},n.prototype.captureEvent=function(t,e,r,n){return this.capture(t,e,r,n)},n.prototype.captureError=function(t,e,r,n){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,r,n)},n.prototype.captureLog=function(t,e,r,n){return this.capture("log",{message:t},e,r,n)},n.prototype.captureNetwork=function(t,e,r,n){e=e||"xhr",t.subtype=t.subtype||e,n&&(t.request=n);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,r)},n.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},n.prototype.captureDom=function(t,e,r,n,o){var i={subtype:t,element:e};return void 0!==r&&(i.value=r),void 0!==n&&(i.checked=n),this.capture("dom",i,"info",o)},n.prototype.captureNavigation=function(t,e,r){return this.capture("navigation",{from:t,to:e},"info",r)},n.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},n.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},n.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},n.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},n.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=n},function(t,e,r){"use strict";function n(t,e,r,n){this.options=t,this.transport=e,this.url=r,this.jsonBackup=n,this.accessToken=t.accessToken,this.transportOptions=o(t,r)}function o(t,e){return a.getTransportFromOptions(t,u,e)}var i=r(4),a=r(11),s=r(12),u={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};n.prototype.postItem=function(t,e){var r=a.transportOptions(this.transportOptions,"POST"),n=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,r,n,e)},n.prototype.buildJsonPayload=function(t,e){var r=a.buildPayload(this.accessToken,t,this.jsonBackup),n=s.truncate(r);return n.error?(e&&e(n.error),null):n.value},n.prototype.postJsonPayload=function(t,e){var r=a.transportOptions(this.transportOptions,"POST");this.transport.postJsonPayload(this.accessToken,r,t,e)},n.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.merge(e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=n},function(t,e,r){"use strict";function n(t,e,r){if(!s.isType(e.context,"string")){ +!function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){"use strict";var n=r(1),o="undefined"!=typeof window&&window._rollbarConfig,i=o&&o.globalAlias||"Rollbar",a="undefined"!=typeof window&&window[i]&&"function"==typeof window[i].shimId&&void 0!==window[i].shimId();if("undefined"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),!a&&o){var s=new n(o);window[i]=s}else"undefined"!=typeof window?(window.rollbar=n,window._rollbarDidLoad=!0):"undefined"!=typeof self&&(self.rollbar=n,self._rollbarDidLoad=!0);t.exports=n},function(t,e,r){"use strict";function n(t,e){this.options=c.handleOptions(x,t);var r=new l(this.options,h,d);this.client=e||new u(this.options,r,p,"browser");var n="undefined"!=typeof window&&window||"undefined"!=typeof self&&self,o="undefined"!=typeof document&&document;i(this.client.notifier,n),a(this.client.queue),(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(f.captureUncaughtExceptions(n,this),f.wrapGlobals(n,this)),(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&f.captureUnhandledRejections(n,this),this.instrumenter=new w(this.options,this.client.telemeter,this,n,o),this.instrumenter.instrument()}function o(t){var e="Rollbar is not initialized";p.error(e),t&&t(new Error(e))}function i(t,e){t.addTransform(m.handleItemWithError).addTransform(m.ensureItemHasSomethingToSay).addTransform(m.addBaseInfo).addTransform(m.addRequestInfo(e)).addTransform(m.addClientInfo(e)).addTransform(m.addPluginInfo(e)).addTransform(m.addBody).addTransform(g.addMessageWithError).addTransform(g.addTelemetryData).addTransform(g.addConfigToPayload).addTransform(m.scrubPayload).addTransform(g.userTransform(p)).addTransform(g.itemToPayload)}function a(t){t.addPredicate(y.checkLevel).addPredicate(v.checkIgnore).addPredicate(y.userCheckIgnore(p)).addPredicate(y.urlIsNotBlacklisted(p)).addPredicate(y.urlIsWhitelisted(p)).addPredicate(y.messageIsIgnored(p))}function s(t){for(var e=0,r=t.length;e=1&&r>e}function i(t,e,r,n,o,i,s){var u=null;return r&&(r=new Error(r)),r||n||(u=a(t,e,o,i,s)),{error:r,shouldSend:n,payload:u}}function a(t,e,r,n,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:r,itemsPerMinute:n}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}var s=r(4);n.globalSettings={startTime:s.now(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||s.now();var r=e-this.startTime;(r<0||r>=6e4)&&(this.startTime=e,this.perMinCounter=0);var a=n.globalSettings.maxItems,u=n.globalSettings.itemsPerMinute;if(o(t,a,this.counter))return i(this.platform,this.platformOptions,a+" max items reached",!1);if(o(t,u,this.perMinCounter))return i(this.platform,this.platformOptions,u+" items per minute reached",!1);this.counter++,this.perMinCounter++;var c=!o(t,a,this.counter),l=c;return c=c&&!o(t,u,this.perMinCounter),i(this.platform,this.platformOptions,null,c,a,u,l)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,r){"use strict";function n(){if(!q&&(q=!0,c(JSON)&&(s(JSON.stringify)&&(F.stringify=JSON.stringify),s(JSON.parse)&&(F.parse=JSON.parse)),!a(F.stringify)||!a(F.parse))){var t=r(6);t(F)}}function o(t,e){return e===i(t)}function i(t){var e=typeof t;return"object"!==e?e:t?t instanceof Error?"error":{}.toString.call(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase():"null"}function a(t){return o(t,"function")}function s(t){var e=/[\\^$.*+?()[\]{}|]/g,r=Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?"),n=RegExp("^"+r+"$");return u(t)&&n.test(t)}function u(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function c(t){return!o(t,"undefined")}function l(t){var e=i(t);return"object"===e||"array"===e}function p(t){return o(t,"error")||o(t,"exception")}function f(t,e,r){var n,i,a,s=o(t,"object"),u=o(t,"array"),c=[];if(s&&r.indexOf(t)!==-1)return t;if(r.push(t),s)for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&c.push(n);else if(u)for(a=0;as)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var r=e+"//"+t.hostname;return t.port&&(r=r+":"+t.port),t.path&&(r+=t.path),r}function b(t,e){var r,n;try{r=F.stringify(t)}catch(o){if(e&&a(e))try{r=e(t)}catch(t){n=t}else n=o}return{error:n,value:r}}function w(t){var e,r;try{e=F.parse(t)}catch(t){r=t}return{error:r,value:e}}function _(t,e,r,n,o,i,a,s){var u={url:e||"",line:r,column:n};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(r,n){try{e(r,n)}catch(e){t.error(e)}}}function k(t,e,r,n,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=A(u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:P(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),n&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){for(var r=0;r500&&(n=n.substr(0,497)+"...");break;case"null":n="null";break;case"undefined":n="undefined";break;case"symbol":n=n.toString()}o.push(n)}return o.join(" ")}function P(){return Date.now?+Date.now():+new Date}function R(t,e){if(t&&t.user_ip&&e!==!0){var r=t.user_ip;if(e)try{var n;if(r.indexOf(".")!==-1)n=r.split("."),n.pop(),n.push("0"),r=n.join(".");else if(r.indexOf(":")!==-1){if(n=r.split(":"),n.length>2){var o=n.slice(0,3),i=o[2].indexOf("/");i!==-1&&(o[2]=o[2].substring(0,i));var a="0000:0000:0000:0000:0000";r=o.concat(a).join(":")}}else r=null}catch(t){r=null}else r=null;t.user_ip=r}}function j(t,e,r){var n=A(t,e,r);return!e||e.overwriteScrubFields?n:(e.scrubFields&&(n.scrubFields=(t.scrubFields||[]).concat(e.scrubFields)),n)}var A=r(5),F={},q=!1;n();var D={debug:0,info:1,warning:2,error:3,critical:4},M={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},U=["log","network","dom","navigation","error","manual"],H=["critical","error","warning","info","debug"];t.exports={addParamsAndAccessTokenToPath:v,createItem:k,createTelemetryEvent:I,filterIp:R,formatArgsAsString:C,formatUrl:y,get:T,handleOptions:j,isError:p,isFunction:a,isIterable:l,isNativeFunction:s,isType:o,jsonParse:w,LEVELS:D,makeUnhandledStackInfo:_,merge:A,now:P,redact:h,sanitizeUrl:m,scrub:O,set:S,stringify:b,traverse:f,typeName:i,uuid4:d}},function(t,e){"use strict";function r(){var t,e,n,o,a,s={},u=null,c=arguments.length;for(t=0;tn&&(o=this.maxQueueSize-n),this.maxQueueSize=n,this.queue.splice(0,o)},n.prototype.copyEvents=function(){var t=Array.prototype.slice.call(this.queue,0);if(i.isFunction(this.options.filterTelemetry))try{for(var e=t.length;e--;)this.options.filterTelemetry(t[e])&&t.splice(e,1)}catch(t){this.options.filterTelemetry=null}return t},n.prototype.capture=function(t,e,r,n,a){var s={level:o(t,r),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};n&&(s.uuid=n);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},n.prototype.captureEvent=function(t,e,r,n){return this.capture(t,e,r,n)},n.prototype.captureError=function(t,e,r,n){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,r,n)},n.prototype.captureLog=function(t,e,r,n){return this.capture("log",{message:t},e,r,n)},n.prototype.captureNetwork=function(t,e,r,n){e=e||"xhr",t.subtype=t.subtype||e,n&&(t.request=n);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,r)},n.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},n.prototype.captureDom=function(t,e,r,n,o){var i={subtype:t,element:e};return void 0!==r&&(i.value=r),void 0!==n&&(i.checked=n),this.capture("dom",i,"info",o)},n.prototype.captureNavigation=function(t,e,r){return this.capture("navigation",{from:t,to:e},"info",r)},n.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},n.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},n.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},n.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},n.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=n},function(t,e,r){"use strict";function n(t,e,r,n){this.options=t,this.transport=e,this.url=r,this.jsonBackup=n,this.accessToken=t.accessToken,this.transportOptions=o(t,r)}function o(t,e){return a.getTransportFromOptions(t,u,e)}var i=r(4),a=r(11),s=r(12),u={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};n.prototype.postItem=function(t,e){var r=a.transportOptions(this.transportOptions,"POST"),n=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,r,n,e)},n.prototype.buildJsonPayload=function(t,e){var r=a.buildPayload(this.accessToken,t,this.jsonBackup),n=s.truncate(r);return n.error?(e&&e(n.error),null):n.value},n.prototype.postJsonPayload=function(t,e){var r=a.transportOptions(this.transportOptions,"POST");this.transport.postJsonPayload(this.accessToken,r,t,e)},n.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.merge(e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=n},function(t,e,r){"use strict";function n(t,e,r){if(!s.isType(e.context,"string")){ var n=s.stringify(e.context,r);n.error?e.context="Error: could not serialize 'context'":e.context=n.value||"",e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}}function o(t,e,r){var n=e.hostname,o=e.protocol,i=e.port,a=e.path,s=e.search,u=t.proxy;if(t.endpoint){var c=r.parse(t.endpoint);n=c.hostname,o=c.protocol,i=c.port,a=c.pathname,s=c.search}return{hostname:n,protocol:o,port:i,path:a,search:s,proxy:u}}function i(t,e){var r=t.protocol||"https:",n=t.port||("http:"===r?80:"https:"===r?443:void 0),o=t.hostname,i=t.path;return t.search&&(i+=t.search),t.proxy&&(i=r+"//"+o+i,o=t.proxy.host||t.proxy.hostname,n=t.proxy.port,r=t.proxy.protocol||r),{protocol:r,hostname:o,path:i,port:n,method:e}}function a(t,e){var r=/\/$/.test(t),n=/^\//.test(e);return r&&n?e=e.substring(1):r||n||(e="/"+e),t+e}var s=r(4);t.exports={buildPayload:n,getTransportFromOptions:o,transportOptions:i,appendPathToPath:a}},function(t,e,r){"use strict";function n(t,e){return[t,f.stringify(t,e)]}function o(t,e){var r=t.length;return r>2*e?t.slice(0,e).concat(t.slice(r-e)):t}function i(t,e,r){r="undefined"==typeof r?30:r;var n,i=t.data.body;if(i.trace_chain)for(var a=i.trace_chain,s=0;st?e.slice(0,t-3).concat("..."):e}function s(t,e,r){function n(e,r,o){switch(f.typeName(r)){case"string":return a(t,r);case"object":case"array":return f.traverse(r,n,o);default:return r}}return e=f.traverse(e,n,[]),[e,f.stringify(e,r)]}function u(t){return t.exception&&(delete t.exception.description,t.exception.message=a(255,t.exception.message)),t.frames=o(t.frames,1),t}function c(t,e){var r=t.data.body;if(r.trace_chain)for(var n=r.trace_chain,o=0;oe}function p(t,e,r){r="undefined"==typeof r?524288:r;for(var o,a,u,p=[n,i,s.bind(null,1024),s.bind(null,512),s.bind(null,256),c];o=p.shift();)if(a=o(t,e),t=a[0],u=a[1],u.error||!l(u.value,r))return u;return u}var f=r(4);t.exports={truncate:p,raw:n,truncateFrames:i,truncateStrings:s,maybeTruncateValue:a}},function(t,e,r){"use strict";function n(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.error(s.formatArgsAsString(t)):console.error.apply(console,t)}function o(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.info(s.formatArgsAsString(t)):console.info.apply(console,t)}function i(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.log(s.formatArgsAsString(t)):console.log.apply(console,t)}r(14);var a=r(15),s=r(4);t.exports={error:n,info:o,log:i}},function(t,e){!function(t){"use strict";t.console||(t.console={});for(var e,r,n=t.console,o=function(){},i=["memory"],a="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");e=i.pop();)n[e]||(n[e]={});for(;r=a.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window)},function(t,e){"use strict";function r(){var t;if(!document)return t;for(var e=3,r=document.createElement("div"),n=r.getElementsByTagName("i");r.innerHTML="",n[0];);return e>4?e:t}var n={ieVersion:r};t.exports=n},function(t,e){"use strict";function r(t,e,r){if(t){var o;if("function"==typeof e._rollbarOldOnError)o=e._rollbarOldOnError;else if(t.onerror){for(o=t.onerror;o._rollbarOldOnError;)o=o._rollbarOldOnError;e._rollbarOldOnError=o}var i=function(){var r=Array.prototype.slice.call(arguments,0);n(t,e,o,r)};r&&(i._rollbarOldOnError=o),t.onerror=i}}function n(t,e,r,n){t._rollbarWrappedError&&(n[4]||(n[4]=t._rollbarWrappedError),n[5]||(n[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null),e.handleUncaughtException.apply(e,n),r&&r.apply(t,n)}function o(t,e,r){if(t){"function"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener("unhandledrejection",t._rollbarURH);var n=function(t){var r,n,o;try{r=t.reason}catch(t){r=void 0}try{n=t.promise}catch(t){n="[unhandledrejection] error getting `promise` from event"}try{o=t.detail,!r&&o&&(r=o.reason,n=o.promise)}catch(t){}r||(r="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(r,n)};n.belongsToShim=r,t._rollbarURH=n,t.addEventListener("unhandledrejection",n)}}function i(t,e,r){if(t){var n,o,i="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(n=0;n=400&&t.status<600}function f(t,e){var r=new Error(t);return r.code=e||"ENOTFOUND",r}var h=r(4),d=r(12),m=r(13);t.exports={get:n,post:o,postJsonPayload:i}},function(t,e){"use strict";function r(t){var e,r,n={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(e=t.indexOf("//"),e!==-1?(n.protocol=t.substring(0,e),r=e+2):r=0,e=t.indexOf("@",r),e!==-1&&(n.auth=t.substring(r,e),r=e+1),e=t.indexOf("/",r),e===-1){if(e=t.indexOf("?",r),e===-1)return e=t.indexOf("#",r),e===-1?n.host=t.substring(r):(n.host=t.substring(r,e),n.hash=t.substring(e)),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),n;n.host=t.substring(r,e),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),r=e}else n.host=t.substring(r,e),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),r=e;if(e=t.indexOf("#",r),e===-1?n.path=t.substring(r):(n.path=t.substring(r,e),n.hash=t.substring(e)),n.path){var o=n.path.split("?");n.pathname=o[0],n.query=o[1],n.search=n.query?"?"+n.query:null}return n}t.exports={parse:r}},function(t,e,r){"use strict";function n(t,e,r){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||d.parse(t.err)}catch(e){m.error("Error while parsing the error object.",e);try{t.message=t.err.message||t.err.description||t.message||String(t.err)}catch(e){t.message=String(t.err)||String(e)}delete t.err}r(null,t)}function o(t,e,r){t.message||t.stackInfo||t.custom||r(new Error("No message, stack info, or custom data"),null),r(null,t)}function i(t,e,r){var n=e.payload&&e.payload.environment||e.environment;t.data=h.merge(t.data,{environment:n,level:t.level,endpoint:e.endpoint,platform:"browser",framework:"browser-js",language:"javascript",server:{},uuid:t.uuid,notifier:{name:"rollbar-browser-js",version:e.version}}),r(null,t)}function a(t){return function(e,r,n){if(!t||!t.location)return n(null,e);var o="$remote_ip";r.captureIp?r.captureIp!==!0&&(o+="_anonymize"):o=null,h.set(e,"data.request",{url:t.location.href,query_string:t.location.search,user_ip:o}),n(null,e)}}function s(t){return function(e,r,n){if(!t)return n(null,e);var o=t.navigator||{},i=t.screen||{};h.set(e,"data.client",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:o.userAgent,language:o.language,cookie_enabled:o.cookieEnabled,screen:{width:i.width,height:i.height}}}),n(null,e)}}function u(t){return function(e,r,n){if(!t||!t.navigator)return n(null,e);for(var o,i=[],a=t.navigator.plugins||[],s=0,u=a.length;s-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),n=this.extractLocation(r.pop()),o=r.join(" ")||void 0,i="eval"===n[0]?void 0:n[0];return new t(o,void 0,i,n[1],n[2],e)},this)},parseFFOrSafari:function(n){var o=r(n.stack.split("\n"),function(t){return!t.match(i)},this);return e(o,function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new t(e);var r=e.split("@"),n=this.extractLocation(r.pop()),o=r.shift()||void 0;return new t(o,void 0,n[0],n[1],n[2],e)},this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf("\n")>-1&&t.message.split("\n").length>t.stacktrace.split("\n").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,n=e.message.split("\n"),o=[],i=2,a=n.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new t(a,s,o[0],o[1],o[2],e)},this)}}})},function(t,e,r){var n,o,i;!function(r,a){"use strict";o=[],n=a,i="function"==typeof n?n.apply(e,o):n,!(void 0!==i&&(t.exports=i))}(this,function(){"use strict";function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t,e,r,n,o,i){void 0!==t&&this.setFunctionName(t),void 0!==e&&this.setArgs(e),void 0!==r&&this.setFileName(r),void 0!==n&&this.setLineNumber(n),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return e.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(t){this.functionName=String(t)},getArgs:function(){return this.args},setArgs:function(t){if("[object Array]"!==Object.prototype.toString.call(t))throw new TypeError("Args must be an Array");this.args=t},getFileName:function(){return this.fileName},setFileName:function(t){this.fileName=String(t)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(e){if(!t(e))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(e)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(e){if(!t(e))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(e)},getSource:function(){return this.source},setSource:function(t){this.source=String(t)},toString:function(){var e=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",n=this.getFileName()?"@"+this.getFileName():"",o=t(this.getLineNumber())?":"+this.getLineNumber():"",i=t(this.getColumnNumber())?":"+this.getColumnNumber():"";return e+r+n+o+i}},e})},function(t,e,r){"use strict";function n(t,e,r){var n=e.payload||{};n.body&&delete n.body;var o=u.merge(t.data,n);t._isUncaught&&(o._isUncaught=!0),t._originalArgs&&(o._originalArgs=t._originalArgs),r(null,o)}function o(t,e,r){t.telemetryEvents&&u.set(t,"data.body.telemetry",t.telemetryEvents),r(null,t)}function i(t,e,r){if(!t.message)return void r(null,t);var n="data.body.trace_chain.0",o=u.get(t,n);if(o||(n="data.body.trace",o=u.get(t,n)),o){if(!o.exception||!o.exception.description)return u.set(t,n+".exception.description",t.message),void r(null,t);var i=u.get(t,n+".extra")||{},a=u.merge(i,{message:t.message});u.set(t,n+".extra",a)}r(null,t)}function a(t){return function(e,r,n){var o=u.merge(e);try{u.isFunction(r.transform)&&r.transform(o.data,e)}catch(o){return r.transform=null,t.error("Error while calling custom transform() function. Removing custom transform().",o),void n(null,e)}n(null,o)}}function s(t,e,r){if(!e.sendConfig)return r(null,t);var n="_rollbarConfig",o=u.get(t,"data.custom")||{};o[n]=e,t.data.custom=o,r(null,t)}var u=r(4);t.exports={itemToPayload:n,addTelemetryData:o,addMessageWithError:i,userTransform:a,addConfigToPayload:s}},function(t,e,r){"use strict";function n(t,e){return!o.get(e,"plugins.jquery.ignoreAjaxErrors")||!o.get(t,"body.message.extra.isAjax")}var o=r(4);t.exports={checkIgnore:n}},function(t,e,r){"use strict";function n(t,e){var r=t.level,n=c.LEVELS[r]||0,o=e.reportLevel,i=c.LEVELS[o]||0;return!(n3){a.__rollbar_xhr.end_time_ms=u.now();var r=null;if(e.autoInstrument.networkResponseHeaders){var n=e.autoInstrument.networkResponseHeaders;r={};try{var i,s;if(n===!0){var c=a.getAllResponseHeaders();if(c){var l,p,f=c.trim().split(/[\r\n]+/);for(s=0;s=0&&t.options[t.selectedIndex]&&this.captureDomEvent("input",t,t.options[t.selectedIndex].value)},s.prototype.captureDomEvent=function(t,e,r,n){if(void 0!==r)if(this.scrubTelemetryInputs||"password"===l.getElementType(e))r="[scrubbed]";else{var o=l.describeElement(e);this.telemetryScrubber?this.telemetryScrubber(o)&&(r="[scrubbed]"):this.defaultValueScrubber(o)&&(r="[scrubbed]")}var i=l.elementArrayToString(l.treeToArray(e));this.telemeter.captureDom(t,i,r,n)},s.prototype.deinstrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,r=!e&&this._window.history&&this._window.history.pushState;r&&o(this.replacements,"navigation")},s.prototype.instrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,r=!e&&this._window.history&&this._window.history.pushState;if(r){var o=this;n(this._window,"onpopstate",function(t){return function(){var e=o._location.href;o.handleUrlChange(o._lastHref,e),t&&t.apply(this,arguments)}},this.replacements,"navigation"),n(this._window.history,"pushState",function(t){return function(){var e=arguments.length>2?arguments[2]:void 0;return e&&o.handleUrlChange(o._lastHref,e+""),t.apply(this,arguments)}},this.replacements,"navigation")}},s.prototype.handleUrlChange=function(t,e){var r=c.parse(this._location.href),n=c.parse(e),o=c.parse(t);this._lastHref=e,r.protocol===n.protocol&&r.host===n.host&&(e=n.path+(n.hash||"")),r.protocol===o.protocol&&r.host===o.host&&(t=o.path+(o.hash||"")),this.telemeter.captureNavigation(t,e)},s.prototype.deinstrumentConnectivity=function(){("addEventListener"in this._window||"body"in this._document)&&(this._window.addEventListener?this.removeListeners("connectivity"):o(this.replacements,"connectivity"))},s.prototype.instrumentConnectivity=function(){if("addEventListener"in this._window||"body"in this._document)if(this._window.addEventListener)this.addListener("connectivity",this._window,"online",void 0,function(){this.telemeter.captureConnectivityChange("online")}.bind(this),!0),this.addListener("connectivity",this._window,"offline",void 0,function(){this.telemeter.captureConnectivityChange("offline")}.bind(this),!0);else{var t=this;n(this._document.body,"ononline",function(e){return function(){t.telemeter.captureConnectivityChange("online"),e&&e.apply(this,arguments)}},this.replacements,"connectivity"),n(this._document.body,"onoffline",function(e){return function(){t.telemeter.captureConnectivityChange("offline"),e&&e.apply(this,arguments)}},this.replacements,"connectivity")}},s.prototype.addListener=function(t,e,r,n,o,i){e.addEventListener?(e.addEventListener(r,o,i),this.eventRemovers[t].push(function(){e.removeEventListener(r,o,i)})):n&&(e.attachEvent(n,o),this.eventRemovers[t].push(function(){e.detachEvent(n,o)}))},s.prototype.removeListeners=function(t){for(var e;this.eventRemovers[t].length;)(e=this.eventRemovers[t].shift())()},t.exports=s},function(t,e){"use strict";function r(t){return(t.getAttribute("type")||"").toLowerCase()}function n(t,e,n){if(t.tagName.toLowerCase()!==e.toLowerCase())return!1;if(!n)return!0;t=r(t);for(var o=0;o ",i=o.length,a=[],u=0,c=t.length-1;c>=0;c--){if(e=s(t[c]),r=u+a.length*i+e.length, c=n+3){a.unshift("...");break}a.unshift(e),u+=e.length}return a.join(o)}function s(t){if(!t||!t.tagName)return"";var e=[t.tagName];t.id&&e.push("#"+t.id),t.classes&&e.push("."+t.classes.join("."));for(var r=0;r= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar merge = __webpack_require__(5);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(6);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t // Detect both Error and Firefox Exception type\n\t return isType(e, 'error') || isType(e, 'exception');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t var same = true;\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t same = same && result[k] === obj[k];\n\t }\n\t\n\t return (keys.length != 0 && !same) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t if (!baseUrlParts) {\n\t return '(unknown)';\n\t }\n\t\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t return undefined;\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t\n\t for (var i = 0, l = o.key.length; i < l; ++i) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t case 'exception': // Firefox Exception type\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = merge(custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\tvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\n\tvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\t\n\tfunction arrayIncludes(arr, val) {\n\t for (var k = 0; k < arr.length; ++k) {\n\t if (arr[k] === val) {\n\t return true;\n\t }\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction createTelemetryEvent(args) {\n\t var type, metadata, level;\n\t var arg;\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'string':\n\t if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n\t type = arg;\n\t } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n\t level = arg;\n\t }\n\t break;\n\t case 'object':\n\t metadata = arg;\n\t break;\n\t default:\n\t break;\n\t }\n\t }\n\t var event = {\n\t type: type || 'manual',\n\t metadata: metadata || {},\n\t level: level\n\t };\n\t\n\t return event;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len - 1; ++i) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart) {\n\t return paramPart + redact();\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact();\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; ++i) {\n\t arg = args[i];\n\t switch (typeName(arg)) {\n\t case 'object':\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500) {\n\t arg = arg.substr(0, 497) + '...';\n\t }\n\t break;\n\t case 'null':\n\t arg = 'null';\n\t break;\n\t case 'undefined':\n\t arg = 'undefined';\n\t break;\n\t case 'symbol':\n\t arg = arg.toString();\n\t break;\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tfunction filterIp(requestData, captureIp) {\n\t if (!requestData || !requestData['user_ip'] || captureIp === true) {\n\t return;\n\t }\n\t var newIp = requestData['user_ip'];\n\t if (!captureIp) {\n\t newIp = null;\n\t } else {\n\t try {\n\t var parts;\n\t if (newIp.indexOf('.') !== -1) {\n\t parts = newIp.split('.');\n\t parts.pop();\n\t parts.push('0');\n\t newIp = parts.join('.');\n\t } else if (newIp.indexOf(':') !== -1) {\n\t parts = newIp.split(':');\n\t if (parts.length > 2) {\n\t var beginning = parts.slice(0, 3);\n\t var slashIdx = beginning[2].indexOf('/');\n\t if (slashIdx !== -1) {\n\t beginning[2] = beginning[2].substring(0, slashIdx);\n\t }\n\t var terminal = '0000:0000:0000:0000:0000';\n\t newIp = beginning.concat(terminal).join(':');\n\t }\n\t } else {\n\t newIp = null;\n\t }\n\t } catch (e) {\n\t newIp = null;\n\t }\n\t }\n\t requestData['user_ip'] = newIp;\n\t}\n\t\n\tfunction handleOptions(current, input, payload) {\n\t var result = merge(current, input, payload);\n\t if (!input || input.overwriteScrubFields) {\n\t return result;\n\t }\n\t if (input.scrubFields) {\n\t result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t createItem: createItem,\n\t createTelemetryEvent: createTelemetryEvent,\n\t filterIp: filterIp,\n\t formatArgsAsString: formatArgsAsString,\n\t formatUrl: formatUrl,\n\t get: get,\n\t handleOptions: handleOptions,\n\t isError: isError,\n\t isFunction: isFunction,\n\t isIterable: isIterable,\n\t isNativeFunction: isNativeFunction,\n\t isType: isType,\n\t jsonParse: jsonParse,\n\t LEVELS: LEVELS,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t merge: merge,\n\t now: now,\n\t redact: redact,\n\t sanitizeUrl: sanitizeUrl,\n\t scrub: scrub,\n\t set: set,\n\t stringify: stringify,\n\t traverse: traverse,\n\t typeName: typeName,\n\t uuid4: uuid4\n\t};\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tfunction merge() {\n\t var i, src, copy, clone, name,\n\t result = {},\n\t current = null,\n\t length = arguments.length;\n\t\n\t for (i=0; i < length; i++) {\n\t current = arguments[i];\n\t if (current == null) {\n\t continue;\n\t }\n\t\n\t for (name in current) {\n\t src = result[name];\n\t copy = current[name];\n\t if (result !== copy) {\n\t if (copy && isPlainObject(copy)) {\n\t clone = src && isPlainObject(src) ? src : {};\n\t result[name] = merge(clone, copy);\n\t } else if (typeof copy !== 'undefined') {\n\t result[name] = copy;\n\t }\n\t }\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = merge;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.merge(options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t var events = Array.prototype.slice.call(this.queue, 0);\n\t if (_.isFunction(this.options.filterTelemetry)) {\n\t try {\n\t var i = events.length;\n\t while (i--) {\n\t if (this.options.filterTelemetry(events[i])) {\n\t events.splice(i, 1);\n\t }\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t }\n\t return events;\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (exc) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n\t return this.capture(type, metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\tvar helpers = __webpack_require__(11);\n\tvar truncation = __webpack_require__(12);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.buildJsonPayload = function(data, callback) {\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t if (callback) {\n\t callback(stringifyResult.error);\n\t }\n\t return null;\n\t }\n\t\n\t return stringifyResult.value;\n\t};\n\t\n\t/**\n\t *\n\t * @param jsonPayload\n\t * @param callback\n\t */\n\tApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.merge(oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\tfunction raw(payload, jsonBackup) {\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction selectFrames(frames, range) {\n\t var len = frames.length;\n\t if (len > range * 2) {\n\t return frames.slice(0, range).concat(frames.slice(len - range));\n\t }\n\t return frames;\n\t}\n\t\n\tfunction truncateFrames(payload, jsonBackup, range) {\n\t range = (typeof range === 'undefined') ? 30 : range;\n\t var body = payload.data.body;\n\t var frames;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t frames = chain[i].frames;\n\t frames = selectFrames(frames, range);\n\t chain[i].frames = frames;\n\t }\n\t } else if (body.trace) {\n\t frames = body.trace.frames;\n\t frames = selectFrames(frames, range);\n\t body.trace.frames = frames;\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction maybeTruncateValue(len, val) {\n\t if (!val) {\n\t return val;\n\t }\n\t if (val.length > len) {\n\t return val.slice(0, len - 3).concat('...');\n\t }\n\t return val;\n\t}\n\t\n\tfunction truncateStrings(len, payload, jsonBackup) {\n\t function truncator(k, v, seen) {\n\t switch (_.typeName(v)) {\n\t case 'string':\n\t return maybeTruncateValue(len, v);\n\t case 'object':\n\t case 'array':\n\t return _.traverse(v, truncator, seen);\n\t default:\n\t return v;\n\t }\n\t }\n\t payload = _.traverse(payload, truncator, []);\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction truncateTraceData(traceData) {\n\t if (traceData.exception) {\n\t delete traceData.exception.description;\n\t traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n\t }\n\t traceData.frames = selectFrames(traceData.frames, 1);\n\t return traceData;\n\t}\n\t\n\tfunction minBody(payload, jsonBackup) {\n\t var body = payload.data.body;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t chain[i] = truncateTraceData(chain[i]);\n\t }\n\t } else if (body.trace) {\n\t body.trace = truncateTraceData(body.trace);\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction needsTruncation(payload, maxSize) {\n\t return payload.length > maxSize;\n\t}\n\t\n\tfunction truncate(payload, jsonBackup, maxSize) {\n\t maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n\t var strategies = [\n\t raw,\n\t truncateFrames,\n\t truncateStrings.bind(null, 1024),\n\t truncateStrings.bind(null, 512),\n\t truncateStrings.bind(null, 256),\n\t minBody\n\t ];\n\t var strategy, results, result;\n\t\n\t while ((strategy = strategies.shift())) {\n\t results = strategy(payload, jsonBackup);\n\t payload = results[0];\n\t result = results[1];\n\t if (result.error || !needsTruncation(result.value, maxSize)) {\n\t return result;\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t truncate: truncate,\n\t\n\t /* for testing */\n\t raw: raw,\n\t truncateFrames: truncateFrames,\n\t truncateStrings: truncateStrings,\n\t maybeTruncateValue: maybeTruncateValue\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(14);\n\tvar detection = __webpack_require__(15);\n\tvar _ = __webpack_require__(4);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror) {\n\t oldOnError = window.onerror;\n\t while (oldOnError._rollbarOldOnError) {\n\t oldOnError = oldOnError._rollbarOldOnError;\n\t }\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t if (shim) {\n\t fn._rollbarOldOnError = oldOnError;\n\t }\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t // Ignore\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/*global XDomainRequest*/\n\t\n\tvar _ = __webpack_require__(4);\n\tvar truncation = __webpack_require__(12);\n\tvar logger = __webpack_require__(13);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n\t}\n\t\n\t// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n\t// so Angular change detection isn't triggered on each API call.\n\t// This is the equivalent of runOutsideAngular().\n\t//\n\tfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\t\n\t if (currentZone && currentZone._name === 'angular') {\n\t var rootZone = currentZone._parent;\n\t rootZone.run(function () {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t });\n\t } else {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t }\n\t}\n\t\n\t/* global RollbarProxy */\n\tfunction _proxyRequest(json, callback) {\n\t var rollbarProxy = new RollbarProxy();\n\t rollbarProxy.sendJsonPayload(\n\t json,\n\t function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n\t function(err) {\n\t callback(new Error(err));\n\t }\n\t );\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t if (typeof RollbarProxy !== 'undefined') {\n\t return _proxyRequest(data, callback);\n\t }\n\t\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post,\n\t postJsonPayload: postJsonPayload\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\tvar errorParser = __webpack_require__(20);\n\tvar logger = __webpack_require__(13);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e) {\n\t logger.error('Error while parsing the error object.', e);\n\t try {\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t } catch (e2) {\n\t item.message = String(item.err) || String(e2);\n\t }\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.merge(item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t var remoteString = '$remote_ip';\n\t if (!options.captureIp) {\n\t remoteString = null;\n\t } else if (options.captureIp !== true) {\n\t remoteString += '_anonymize';\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: remoteString\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.merge(custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (options.sendFrameUrl) {\n\t frame.url = stackFrame.url;\n\t }\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.merge(custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(21);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext();\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t var name = exception.constructor && exception.constructor.name;\n\t if (!name || !name.length || name.length < 3) {\n\t name = exception.name;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(22)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.merge(item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.merge(extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.merge(item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data, item);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\tvar urlparser = __webpack_require__(18);\n\tvar domUtil = __webpack_require__(27);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction nameFromDescription(description) {\n\t if (!description || !description.attributes) { return null; }\n\t var attrs = description.attributes;\n\t for (var a = 0; a < attrs.length; ++a) {\n\t if (attrs[a].key === 'name') {\n\t return attrs[a].value;\n\t }\n\t }\n\t return null;\n\t}\n\t\n\tfunction defaultValueScrubber(scrubFields) {\n\t var patterns = [];\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t patterns.push(new RegExp(scrubFields[i], 'i'));\n\t }\n\t return function(description) {\n\t var name = nameFromDescription(description);\n\t if (!name) { return false; }\n\t for (var i = 0; i < patterns.length; ++i) {\n\t if (patterns[i].test(name)) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t };\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.merge(this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState < 2) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t }\n\t if (xhr.readyState > 3) {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber) {\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t } else if (this.defaultValueScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// rollbar.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 992b265e879b234e4488","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 0\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 4\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 5\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///rollbar.min.js","webpack:///webpack/bootstrap e604cb467002a39af472","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/utility.js","webpack:///./src/merge.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/queue.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/truncation.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","rollbar","options","window","_rollbarConfig","alias","globalAlias","shimRunning","shimId","undefined","_rollbarStartTime","Date","getTime","Rollbar","_rollbarDidLoad","self","client","this","_","handleOptions","defaultOptions","api","API","transport","urllib","Client","logger","gWindow","gDocument","document","addTransformsToNotifier","notifier","addPredicatesToQueue","queue","captureUncaught","handleUncaughtExceptions","globals","captureUncaughtExceptions","wrapGlobals","captureUnhandledRejections","handleUnhandledRejections","instrumenter","Instrumenter","telemeter","instrument","handleUninitialized","maybeCallback","message","error","Error","addTransform","transforms","handleItemWithError","ensureItemHasSomethingToSay","addBaseInfo","addRequestInfo","addClientInfo","addPluginInfo","addBody","sharedTransforms","addMessageWithError","addTelemetryData","addConfigToPayload","scrubPayload","userTransform","itemToPayload","addPredicate","sharedPredicates","checkLevel","predicates","checkIgnore","userCheckIgnore","urlIsNotBlacklisted","urlIsWhitelisted","messageIsIgnored","_getFirstFunction","args","i","len","length","isFunction","errorParser","_instance","init","global","configure","prototype","payloadData","oldOptions","payload","lastError","log","item","_createItem","arguments","uuid","apply","debug","info","warn","warning","critical","buildJsonPayload","sendJsonPayload","jsonPayload","handleUncaughtException","url","lineno","colno","context","stackInfo","makeUnhandledStackInfo","isError","_unhandledStackInfo","level","uncaughtErrorLevel","_isUncaught","handleUnhandledRejection","reason","promise","reasonResult","stringify","value","_rollbarContext","_originalArgs","push","wrap","f","_before","ctxFn","_isWrap","_rollbar_wrapped","exc","e","_rollbarWrappedError","isType","String","_wrappedSource","toString","hasOwnProperty","prop","captureEvent","event","createTelemetryEvent","type","metadata","captureDomContentLoaded","ts","captureLoad","createItem","version","scrubFields","logLevel","reportLevel","endpoint","verbose","enabled","sendConfig","includeItemsInTelemetry","captureIp","platform","merge","rateLimiter","configureGlobal","setPlatformOptions","Queue","Notifier","Telemeter","lastErrorHash","generateItemHash","stack","err","RateLimiter","maxItems","itemsPerMinute","_defaultLogLevel","_log","wait","callback","postJsonPayload","defaultLevel","_sameAsLastError","_captureRollbarItem","telemetryEvents","copyEvents","itemHash","startTime","now","counter","perMinCounter","platformOptions","checkRate","limit","ignoreRateLimit","shouldSendValue","shouldSend","globalRateLimit","limitPerMin","perMinute","rateLimitPayload","msg","environment","body","extra","language","framework","name","globalSettings","elapsedTime","globalRateLimitPerMin","setupJSON","__initRollbarJSON","isDefined","JSON","isNativeFunction","RollbarJSON","parse","setupCustomJSON","x","t","typeName","match","toLowerCase","reRegExpChar","funcMatchString","Function","Object","replace","reIsNative","RegExp","isObject","test","u","isIterable","traverse","obj","func","seen","k","v","isObj","isArray","keys","indexOf","result","same","redact","uuid4","d","r","Math","random","floor","sanitizeUrl","baseUrlParts","parseUri","anchor","source","query","str","o","parseUriOptions","parser","strictMode","exec","uri","l","key","q","$0","$1","$2","addParamsAndAccessTokenToPath","accessToken","params","access_token","paramsArray","join","sort","path","qs","h","substring","formatUrl","protocol","port","hostname","backup","jsonError","backupError","jsonParse","s","mode","backupMessage","location","line","column","guessFunctionName","gatherContext","href","useragent","navigator","userAgent","wrapCallback","resp","requestKeys","lambdaContext","custom","request","arg","extraArgs","typ","DOMException","j","timestamp","arrayIncludes","arr","val","TELEMETRY_TYPES","TELEMETRY_LEVELS","get","split","set","temp","replacement","scrub","data","redactQueryParam","dummy0","paramPart","paramScrubber","queryRes","valScrubber","paramRes","scrubber","tmpV","_getScrubFieldRegexs","_getScrubQueryParamRegexs","pat","ret","formatArgsAsString","substr","filterIp","requestData","newIp","parts","pop","beginning","slice","slashIdx","terminal","concat","current","input","overwriteScrubFields","LEVELS","strict","loose","src","copy","clone","isPlainObject","hasOwn","toStr","hasOwnConstructor","hasIsPrototypeOf","constructor","n","this_value","valueOf","quote","string","rx_escapable","lastIndex","a","meta","charCodeAt","holder","partial","mind","gap","toJSON","rep","isFinite","indent","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Boolean","Number","\b","\t","\n","\f","\r","\"","\\","replacer","space","","debackslashify","text","ignore","b","fromCharCode","parseInt","escapes","state","container","/","go","firstokey","okey","ovalue","firstavalue","avalue","number","action","{","}","ocomma","[","]","acomma",":","colon","SyntaxError",",","true","false","null","reviver","tx","walk","pendingItems","pendingRequests","retryQueue","retryHandle","waitCallback","waitIntervalID","predicate","addPendingItem","removePendingItem","idx","splice","addItem","originalError","originalItem","predicateResult","_applyPredicates","stop","_maybeLog","_makeApiRequest","_dequeuePendingRequest","bind","_maybeCallWait","clearInterval","setInterval","rateLimitResponse","postItem","_maybeRetry","RETRIABLE_ERRORS","shouldRetry","retryInterval","code","_retryApiRequest","retryObject","shift","transform","_applyTransforms","transformIndex","transformsLength","cb","maxTelemetryEvents","MAX_EVENTS","maxQueueSize","max","min","getLevel","manual","newMaxEvents","deleteCount","events","Array","filterTelemetry","capture","rollbarUUID","timestamp_ms","captureError","captureLog","captureNetwork","subtype","levelFromStatus","status_code","statusCode","captureDom","element","checked","captureNavigation","from","to","captureConnectivityChange","change","Api","jsonBackup","transportOptions","_getTransport","helpers","getTransportFromOptions","truncation","search","buildPayload","post","stringifyResult","truncate","contextResult","defaults","proxy","opts","pathname","method","host","appendPathToPath","base","baseTrailingSlash","pathBeginningSlash","raw","selectFrames","frames","range","truncateFrames","trace_chain","chain","trace","maybeTruncateValue","truncateStrings","truncator","truncateTraceData","traceData","exception","description","minBody","needsTruncation","maxSize","strategy","results","strategies","unshift","detection","ieVersion","console","con","dummy","properties","methods","getIEVersion","undef","div","createElement","all","getElementsByTagName","innerHTML","Detection","handler","shim","oldOnError","_rollbarOldOnError","onerror","fn","_rollbarWindowOnError","old","_rollbarURH","belongsToShim","removeEventListener","rejectionHandler","evt","detail","addEventListener","_extendListenerPrototype","oldAddEventListener","_rollbarOldAdd","addFn","bubble","oldRemoveEventListener","_rollbarOldRemove","removeFn","requestFactory","_makeZoneRequest","writeData","currentZone","Zone","_name","rootZone","_parent","run","_makeRequest","_proxyRequest","json","rollbarProxy","RollbarProxy","_msg","_createXMLHTTPObject","onreadystatechange","readyState","parseResponse","responseText","_isSuccess","_isNormalFailure","status","_newRetriableError","ex","open","setRequestHeader","send","e1","XDomainRequest","xdomainrequest","onprogress","ontimeout","onload","e2","xmlhttp","factories","XMLHttpRequest","ActiveXObject","numFactories","last","auth","hash","pathParts","_savedStackTrace","server","remoteString","query_string","user_ip","nav","scr","screen","runtime_ms","round","javascript","browser","cookie_enabled","cookieEnabled","width","height","cur","plugins","navPlugins","addBodyTrace","addBodyMessage","messageResult","guess","guessErrorClass","className","class","rawStack","rawException","stackFrame","frame","pre","contextLength","mid","filename","sendFrameUrl","endsWith","reverse","UNKNOWN_FUNCTION","Frame","_stackFrame","fileName","lineNumber","functionName","columnNumber","Stack","getStack","parserStack","ErrorStackParser","errMsg","errClassMatch","ERR_CLASS_REGEXP","errClass","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","root","factory","StackFrame","_map","array","thisArg","map","output","_filter","filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","isNaN","parseFloat","filtered","tokens","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","_isNumber","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","getArgs","TypeError","getFileName","getLineNumber","getColumnNumber","getSource","payloadOptions","tracePath","newExtra","newItem","configKey","settings","levelVal","reportLevelVal","isUncaught","onSendCallback","urlIsOnAList","whiteOrBlack","black","list","frameLength","listLength","urlRegex","hostBlackList","hostWhiteList","listName","exceptionMessage","ignoredMessages","rIgnoredMessage","traceMessage","bodyMessage","replacements","orig","restore","nameFromDescription","attributes","attrs","defaultValueScrubber","patterns","_window","_document","autoInstrument","scrubTelemetryInputs","telemetryScrubber","network","navigation","connectivity","eventRemovers","dom","_location","_lastHref","urlparser","domUtil","networkResponseHeaders","networkResponseBody","networkRequestBody","oldSettings","deinstrumentNetwork","instrumentNetwork","deinstrumentConsole","instrumentConsole","deinstrumentDom","instrumentDom","deinstrumentNavigation","instrumentNavigation","deinstrumentConnectivity","instrumentConnectivity","wrapProp","xhr","xhrp","__rollbar_xhr","start_time_ms","end_time_ms","onreadystatechangeHandler","__rollbar_event","headers","headersConfig","header","allHeaders","getAllResponseHeaders","trim","getResponseHeader","response","then","wrapConsole","origConsole","removeListeners","clickHandler","handleClick","blurHandler","handleBlur","addListener","getElementFromEvent","hasTag","tagName","anchorOrButton","isDescribedElement","captureDomEvent","handleSelectInputChanged","elem","multiple","selected","selectedIndex","isChecked","getElementType","describeElement","elementString","elementArrayToString","treeToArray","chrome","chromePackagedApp","app","runtime","hasPushState","history","pushState","handleUrlChange","parsedHref","parsedTo","parsedFrom","section","altType","attachEvent","detachEvent","getAttribute","subtypes","doc","target","elementFromPoint","clientX","clientY","nextDescription","MAX_HEIGHT","out","parentNode","nextStr","totalLength","MAX_LENGTH","separator","separatorLength","descriptionToString","desc","classes","attr"],"mappings":"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","file":"rollbar.min.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar rollbar = __webpack_require__(1);\n\t\n\tvar options = (typeof window !== 'undefined') && window._rollbarConfig;\n\tvar alias = options && options.globalAlias || 'Rollbar';\n\tvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\t\n\tif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n\t window._rollbarStartTime = (new Date()).getTime();\n\t}\n\t\n\tif (!shimRunning && options) {\n\t var Rollbar = new rollbar(options);\n\t window[alias] = Rollbar;\n\t} else if (typeof window !== 'undefined') {\n\t window.rollbar = rollbar;\n\t window._rollbarDidLoad = true;\n\t} else if (typeof self !== 'undefined') {\n\t self.rollbar = rollbar;\n\t self._rollbarDidLoad = true;\n\t}\n\t\n\tmodule.exports = rollbar;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Client = __webpack_require__(2);\n\tvar _ = __webpack_require__(4);\n\tvar API = __webpack_require__(10);\n\tvar logger = __webpack_require__(13);\n\tvar globals = __webpack_require__(16);\n\t\n\tvar transport = __webpack_require__(17);\n\tvar urllib = __webpack_require__(18);\n\t\n\tvar transforms = __webpack_require__(19);\n\tvar sharedTransforms = __webpack_require__(23);\n\tvar predicates = __webpack_require__(24);\n\tvar sharedPredicates = __webpack_require__(25);\n\tvar errorParser = __webpack_require__(20);\n\tvar Instrumenter = __webpack_require__(26);\n\t\n\tfunction Rollbar(options, client) {\n\t this.options = _.handleOptions(defaultOptions, options);\n\t var api = new API(this.options, transport, urllib);\n\t this.client = client || new Client(this.options, api, logger, 'browser');\n\t\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var gDocument = (typeof document != 'undefined') && document;\n\t addTransformsToNotifier(this.client.notifier, gWindow);\n\t addPredicatesToQueue(this.client.queue);\n\t if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n\t globals.captureUncaughtExceptions(gWindow, this);\n\t globals.wrapGlobals(gWindow, this);\n\t }\n\t if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n\t globals.captureUnhandledRejections(gWindow, this);\n\t }\n\t\n\t this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n\t this.instrumenter.instrument();\n\t}\n\t\n\tvar _instance = null;\n\tRollbar.init = function(options, client) {\n\t if (_instance) {\n\t return _instance.global(options).configure(options);\n\t }\n\t _instance = new Rollbar(options, client);\n\t return _instance;\n\t};\n\t\n\tfunction handleUninitialized(maybeCallback) {\n\t var message = 'Rollbar is not initialized';\n\t logger.error(message);\n\t if (maybeCallback) {\n\t maybeCallback(new Error(message));\n\t }\n\t}\n\t\n\tRollbar.prototype.global = function(options) {\n\t this.client.global(options);\n\t return this;\n\t};\n\tRollbar.global = function(options) {\n\t if (_instance) {\n\t return _instance.global(options);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.handleOptions(oldOptions, options, payload);\n\t this.client.configure(this.options, payloadData);\n\t this.instrumenter.configure(this.options);\n\t return this;\n\t};\n\tRollbar.configure = function(options, payloadData) {\n\t if (_instance) {\n\t return _instance.configure(options, payloadData);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.lastError = function() {\n\t return this.client.lastError;\n\t};\n\tRollbar.lastError = function() {\n\t if (_instance) {\n\t return _instance.lastError();\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.log = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.log(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.log = function() {\n\t if (_instance) {\n\t return _instance.log.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.debug = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.debug(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.debug = function() {\n\t if (_instance) {\n\t return _instance.debug.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.info = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.info(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.info = function() {\n\t if (_instance) {\n\t return _instance.info.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warn = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warn(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warn = function() {\n\t if (_instance) {\n\t return _instance.warn.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warning = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warning(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warning = function() {\n\t if (_instance) {\n\t return _instance.warning.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.error = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.error(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.error = function() {\n\t if (_instance) {\n\t return _instance.error.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.critical = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.critical(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.critical = function() {\n\t if (_instance) {\n\t return _instance.critical.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.buildJsonPayload = function(item) {\n\t return this.client.buildJsonPayload(item);\n\t};\n\tRollbar.buildJsonPayload = function() {\n\t if (_instance) {\n\t return _instance.buildJsonPayload.apply(_instance, arguments);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n\t return this.client.sendJsonPayload(jsonPayload);\n\t};\n\tRollbar.sendJsonPayload = function() {\n\t if (_instance) {\n\t return _instance.sendJsonPayload.apply(_instance, arguments);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n\t var item;\n\t var stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t 'onerror',\n\t 'uncaught exception',\n\t errorParser\n\t );\n\t if (_.isError(error)) {\n\t item = this._createItem([message, error, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else if (_.isError(url)) {\n\t item = this._createItem([message, url, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else {\n\t item = this._createItem([message, context]);\n\t item.stackInfo = stackInfo;\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n\t var message = 'unhandled rejection was null or undefined!';\n\t if (reason) {\n\t if (reason.message) {\n\t message = reason.message;\n\t } else {\n\t var reasonResult = _.stringify(reason);\n\t if (reasonResult.value) {\n\t message = reasonResult.value;\n\t }\n\t }\n\t }\n\t var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\t\n\t var item;\n\t if (_.isError(reason)) {\n\t item = this._createItem([message, reason, context]);\n\t } else {\n\t item = this._createItem([message, reason, context]);\n\t item.stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t '',\n\t 0,\n\t 0,\n\t null,\n\t 'unhandledrejection',\n\t '',\n\t errorParser\n\t );\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t item._originalArgs = item._originalArgs || [];\n\t item._originalArgs.push(promise);\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.wrap = function(f, context, _before) {\n\t try {\n\t var ctxFn;\n\t if(_.isFunction(context)) {\n\t ctxFn = context;\n\t } else {\n\t ctxFn = function() { return context || {}; };\n\t }\n\t\n\t if (!_.isFunction(f)) {\n\t return f;\n\t }\n\t\n\t if (f._isWrap) {\n\t return f;\n\t }\n\t\n\t if (!f._rollbar_wrapped) {\n\t f._rollbar_wrapped = function () {\n\t if (_before && _.isFunction(_before)) {\n\t _before.apply(this, arguments);\n\t }\n\t try {\n\t return f.apply(this, arguments);\n\t } catch(exc) {\n\t var e = exc;\n\t if (e && window._rollbarWrappedError !== e) {\n\t if (_.isType(e, 'string')) {\n\t e = new String(e);\n\t }\n\t e._rollbarContext = ctxFn() || {};\n\t e._rollbarContext._wrappedSource = f.toString();\n\t\n\t window._rollbarWrappedError = e;\n\t }\n\t throw e;\n\t }\n\t };\n\t\n\t f._rollbar_wrapped._isWrap = true;\n\t\n\t if (f.hasOwnProperty) {\n\t for (var prop in f) {\n\t if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n\t f._rollbar_wrapped[prop] = f[prop];\n\t }\n\t }\n\t }\n\t }\n\t\n\t return f._rollbar_wrapped;\n\t } catch (e) {\n\t // Return the original function if the wrap fails.\n\t return f;\n\t }\n\t};\n\tRollbar.wrap = function(f, context) {\n\t if (_instance) {\n\t return _instance.wrap(f, context);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.captureEvent = function() {\n\t var event = _.createTelemetryEvent(arguments);\n\t return this.client.captureEvent(event.type, event.metadata, event.level);\n\t};\n\tRollbar.captureEvent = function() {\n\t if (_instance) {\n\t return _instance.captureEvent.apply(_instance, arguments);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\t// The following two methods are used internally and are not meant for public use\n\tRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureLoad(ts);\n\t};\n\t\n\t/* Internal */\n\t\n\tfunction addTransformsToNotifier(notifier, gWindow) {\n\t notifier\n\t .addTransform(transforms.handleItemWithError)\n\t .addTransform(transforms.ensureItemHasSomethingToSay)\n\t .addTransform(transforms.addBaseInfo)\n\t .addTransform(transforms.addRequestInfo(gWindow))\n\t .addTransform(transforms.addClientInfo(gWindow))\n\t .addTransform(transforms.addPluginInfo(gWindow))\n\t .addTransform(transforms.addBody)\n\t .addTransform(sharedTransforms.addMessageWithError)\n\t .addTransform(sharedTransforms.addTelemetryData)\n\t .addTransform(sharedTransforms.addConfigToPayload)\n\t .addTransform(transforms.scrubPayload)\n\t .addTransform(sharedTransforms.userTransform(logger))\n\t .addTransform(sharedTransforms.itemToPayload);\n\t}\n\t\n\tfunction addPredicatesToQueue(queue) {\n\t queue\n\t .addPredicate(sharedPredicates.checkLevel)\n\t .addPredicate(predicates.checkIgnore)\n\t .addPredicate(sharedPredicates.userCheckIgnore(logger))\n\t .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n\t .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n\t .addPredicate(sharedPredicates.messageIsIgnored(logger));\n\t}\n\t\n\tRollbar.prototype._createItem = function(args) {\n\t return _.createItem(args, logger, this);\n\t};\n\t\n\tfunction _getFirstFunction(args) {\n\t for (var i = 0, len = args.length; i < len; ++i) {\n\t if (_.isFunction(args[i])) {\n\t return args[i];\n\t }\n\t }\n\t return undefined;\n\t}\n\t\n\t/* global __NOTIFIER_VERSION__:false */\n\t/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n\t/* global __DEFAULT_LOG_LEVEL__:false */\n\t/* global __DEFAULT_REPORT_LEVEL__:false */\n\t/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n\t/* global __DEFAULT_ENDPOINT__:false */\n\t\n\tvar defaultOptions = {\n\t version: (\"2.6.1\"),\n\t scrubFields: ([\"pw\",\"pass\",\"passwd\",\"password\",\"secret\",\"confirm_password\",\"confirmPassword\",\"password_confirmation\",\"passwordConfirmation\",\"access_token\",\"accessToken\",\"secret_key\",\"secretKey\",\"secretToken\",\"cc-number\",\"card number\",\"cardnumber\",\"cardnum\",\"ccnum\",\"ccnumber\",\"cc num\",\"creditcardnumber\",\"credit card number\",\"newcreditcardnumber\",\"new credit card\",\"creditcardno\",\"credit card no\",\"card#\",\"card #\",\"cc-csc\",\"cvc2\",\"cvv2\",\"ccv2\",\"security code\",\"card verification\",\"name on credit card\",\"name on card\",\"nameoncard\",\"cardholder\",\"card holder\",\"name des karteninhabers\",\"card type\",\"cardtype\",\"cc type\",\"cctype\",\"payment type\",\"expiration date\",\"expirationdate\",\"expdate\",\"cc-exp\"]),\n\t logLevel: (\"debug\"),\n\t reportLevel: (\"debug\"),\n\t uncaughtErrorLevel: (\"error\"),\n\t endpoint: (\"api.rollbar.com/api/1/item/\"),\n\t verbose: false,\n\t enabled: true,\n\t sendConfig: false,\n\t includeItemsInTelemetry: true,\n\t captureIp: true\n\t};\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar RateLimiter = __webpack_require__(3);\n\tvar Queue = __webpack_require__(7);\n\tvar Notifier = __webpack_require__(8);\n\tvar Telemeter = __webpack_require__(9);\n\tvar _ = __webpack_require__(4);\n\t\n\t/*\n\t * Rollbar - the interface to Rollbar\n\t *\n\t * @param options\n\t * @param api\n\t * @param logger\n\t */\n\tfunction Rollbar(options, api, logger, platform) {\n\t this.options = _.merge(options);\n\t this.logger = logger;\n\t Rollbar.rateLimiter.configureGlobal(this.options);\n\t Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n\t this.api = api;\n\t this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n\t this.notifier = new Notifier(this.queue, this.options);\n\t this.telemeter = new Telemeter(this.options);\n\t this.lastError = null;\n\t this.lastErrorHash = 'none';\n\t}\n\t\n\tvar defaultOptions = {\n\t maxItems: 0,\n\t itemsPerMinute: 60\n\t};\n\t\n\tRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\t\n\tRollbar.prototype.global = function(options) {\n\t Rollbar.rateLimiter.configureGlobal(options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.merge(oldOptions, options, payload);\n\t this.notifier && this.notifier.configure(this.options);\n\t this.telemeter && this.telemeter.configure(this.options);\n\t this.global(this.options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.log = function(item) {\n\t var level = this._defaultLogLevel();\n\t return this._log(level, item);\n\t};\n\t\n\tRollbar.prototype.debug = function(item) {\n\t this._log('debug', item);\n\t};\n\t\n\tRollbar.prototype.info = function(item) {\n\t this._log('info', item);\n\t};\n\t\n\tRollbar.prototype.warn = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.warning = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.error = function(item) {\n\t this._log('error', item);\n\t};\n\t\n\tRollbar.prototype.critical = function(item) {\n\t this._log('critical', item);\n\t};\n\t\n\tRollbar.prototype.wait = function(callback) {\n\t this.queue.wait(callback);\n\t};\n\t\n\tRollbar.prototype.captureEvent = function(type, metadata, level) {\n\t return this.telemeter.captureEvent(type, metadata, level);\n\t};\n\t\n\tRollbar.prototype.captureDomContentLoaded = function(ts) {\n\t return this.telemeter.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(ts) {\n\t return this.telemeter.captureLoad(ts);\n\t};\n\t\n\tRollbar.prototype.buildJsonPayload = function(item) {\n\t return this.api.buildJsonPayload(item);\n\t};\n\t\n\tRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n\t this.api.postJsonPayload(jsonPayload);\n\t};\n\t\n\t/* Internal */\n\t\n\tRollbar.prototype._log = function(defaultLevel, item) {\n\t var callback;\n\t if (item.callback) {\n\t callback = item.callback;\n\t delete item.callback;\n\t }\n\t if (this._sameAsLastError(item)) {\n\t if (callback) {\n\t var error = new Error('ignored identical item');\n\t error.item = item;\n\t callback(error);\n\t }\n\t return;\n\t }\n\t try {\n\t item.level = item.level || defaultLevel;\n\t this.telemeter._captureRollbarItem(item);\n\t item.telemetryEvents = this.telemeter.copyEvents();\n\t this.notifier.log(item, callback);\n\t } catch (e) {\n\t this.logger.error(e);\n\t }\n\t};\n\t\n\tRollbar.prototype._defaultLogLevel = function() {\n\t return this.options.logLevel || 'debug';\n\t};\n\t\n\tRollbar.prototype._sameAsLastError = function(item) {\n\t if (!item._isUncaught) {\n\t return false;\n\t }\n\t var itemHash = generateItemHash(item);\n\t if (this.lastErrorHash === itemHash) {\n\t return true;\n\t }\n\t this.lastError = item.err;\n\t this.lastErrorHash = itemHash;\n\t return false;\n\t};\n\t\n\tfunction generateItemHash(item) {\n\t var message = item.message || '';\n\t var stack = (item.err || {}).stack || String(item.err);\n\t return message + '::' + stack;\n\t}\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\t/*\n\t * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n\t *\n\t * @param options - the same options that are accepted by configureGlobal offered as a convenience\n\t */\n\tfunction RateLimiter(options) {\n\t this.startTime = _.now();\n\t this.counter = 0;\n\t this.perMinCounter = 0;\n\t this.platform = null;\n\t this.platformOptions = {};\n\t this.configureGlobal(options);\n\t}\n\t\n\tRateLimiter.globalSettings = {\n\t startTime: _.now(),\n\t maxItems: undefined,\n\t itemsPerMinute: undefined\n\t};\n\t\n\t/*\n\t * configureGlobal - set the global rate limiter options\n\t *\n\t * @param options - Only the following values are recognized:\n\t * startTime: a timestamp of the form returned by (new Date()).getTime()\n\t * maxItems: the maximum items\n\t * itemsPerMinute: the max number of items to send in a given minute\n\t */\n\tRateLimiter.prototype.configureGlobal = function(options) {\n\t if (options.startTime !== undefined) {\n\t RateLimiter.globalSettings.startTime = options.startTime;\n\t }\n\t if (options.maxItems !== undefined) {\n\t RateLimiter.globalSettings.maxItems = options.maxItems;\n\t }\n\t if (options.itemsPerMinute !== undefined) {\n\t RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n\t }\n\t};\n\t\n\t/*\n\t * shouldSend - determine if we should send a given item based on rate limit settings\n\t *\n\t * @param item - the item we are about to send\n\t * @returns An object with the following structure:\n\t * error: (Error|null)\n\t * shouldSend: bool\n\t * payload: (Object|null)\n\t * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n\t * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n\t * describe the situation, but it means that we were already over a rate limit (either globally or\n\t * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n\t * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n\t * place of the passed in item.\n\t */\n\tRateLimiter.prototype.shouldSend = function(item, now) {\n\t now = now || _.now();\n\t var elapsedTime = now - this.startTime;\n\t if (elapsedTime < 0 || elapsedTime >= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar merge = __webpack_require__(5);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(6);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t // Detect both Error and Firefox Exception type\n\t return isType(e, 'error') || isType(e, 'exception');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t var same = true;\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t same = same && result[k] === obj[k];\n\t }\n\t\n\t return (keys.length != 0 && !same) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t if (!baseUrlParts) {\n\t return '(unknown)';\n\t }\n\t\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t return undefined;\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t\n\t for (var i = 0, l = o.key.length; i < l; ++i) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t case 'exception': // Firefox Exception type\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = merge(custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\tvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\n\tvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\t\n\tfunction arrayIncludes(arr, val) {\n\t for (var k = 0; k < arr.length; ++k) {\n\t if (arr[k] === val) {\n\t return true;\n\t }\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction createTelemetryEvent(args) {\n\t var type, metadata, level;\n\t var arg;\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'string':\n\t if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n\t type = arg;\n\t } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n\t level = arg;\n\t }\n\t break;\n\t case 'object':\n\t metadata = arg;\n\t break;\n\t default:\n\t break;\n\t }\n\t }\n\t var event = {\n\t type: type || 'manual',\n\t metadata: metadata || {},\n\t level: level\n\t };\n\t\n\t return event;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len - 1; ++i) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart) {\n\t return paramPart + redact();\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact();\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; ++i) {\n\t arg = args[i];\n\t switch (typeName(arg)) {\n\t case 'object':\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500) {\n\t arg = arg.substr(0, 497) + '...';\n\t }\n\t break;\n\t case 'null':\n\t arg = 'null';\n\t break;\n\t case 'undefined':\n\t arg = 'undefined';\n\t break;\n\t case 'symbol':\n\t arg = arg.toString();\n\t break;\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tfunction filterIp(requestData, captureIp) {\n\t if (!requestData || !requestData['user_ip'] || captureIp === true) {\n\t return;\n\t }\n\t var newIp = requestData['user_ip'];\n\t if (!captureIp) {\n\t newIp = null;\n\t } else {\n\t try {\n\t var parts;\n\t if (newIp.indexOf('.') !== -1) {\n\t parts = newIp.split('.');\n\t parts.pop();\n\t parts.push('0');\n\t newIp = parts.join('.');\n\t } else if (newIp.indexOf(':') !== -1) {\n\t parts = newIp.split(':');\n\t if (parts.length > 2) {\n\t var beginning = parts.slice(0, 3);\n\t var slashIdx = beginning[2].indexOf('/');\n\t if (slashIdx !== -1) {\n\t beginning[2] = beginning[2].substring(0, slashIdx);\n\t }\n\t var terminal = '0000:0000:0000:0000:0000';\n\t newIp = beginning.concat(terminal).join(':');\n\t }\n\t } else {\n\t newIp = null;\n\t }\n\t } catch (e) {\n\t newIp = null;\n\t }\n\t }\n\t requestData['user_ip'] = newIp;\n\t}\n\t\n\tfunction handleOptions(current, input, payload) {\n\t var result = merge(current, input, payload);\n\t if (!input || input.overwriteScrubFields) {\n\t return result;\n\t }\n\t if (input.scrubFields) {\n\t result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t createItem: createItem,\n\t createTelemetryEvent: createTelemetryEvent,\n\t filterIp: filterIp,\n\t formatArgsAsString: formatArgsAsString,\n\t formatUrl: formatUrl,\n\t get: get,\n\t handleOptions: handleOptions,\n\t isError: isError,\n\t isFunction: isFunction,\n\t isIterable: isIterable,\n\t isNativeFunction: isNativeFunction,\n\t isType: isType,\n\t jsonParse: jsonParse,\n\t LEVELS: LEVELS,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t merge: merge,\n\t now: now,\n\t redact: redact,\n\t sanitizeUrl: sanitizeUrl,\n\t scrub: scrub,\n\t set: set,\n\t stringify: stringify,\n\t traverse: traverse,\n\t typeName: typeName,\n\t uuid4: uuid4\n\t};\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tfunction merge() {\n\t var i, src, copy, clone, name,\n\t result = {},\n\t current = null,\n\t length = arguments.length;\n\t\n\t for (i=0; i < length; i++) {\n\t current = arguments[i];\n\t if (current == null) {\n\t continue;\n\t }\n\t\n\t for (name in current) {\n\t src = result[name];\n\t copy = current[name];\n\t if (result !== copy) {\n\t if (copy && isPlainObject(copy)) {\n\t clone = src && isPlainObject(src) ? src : {};\n\t result[name] = merge(clone, copy);\n\t } else if (typeof copy !== 'undefined') {\n\t result[name] = copy;\n\t }\n\t }\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = merge;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.merge(options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t var events = Array.prototype.slice.call(this.queue, 0);\n\t if (_.isFunction(this.options.filterTelemetry)) {\n\t try {\n\t var i = events.length;\n\t while (i--) {\n\t if (this.options.filterTelemetry(events[i])) {\n\t events.splice(i, 1);\n\t }\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t }\n\t return events;\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (exc) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n\t return this.capture(type, metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\tvar helpers = __webpack_require__(11);\n\tvar truncation = __webpack_require__(12);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.buildJsonPayload = function(data, callback) {\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t if (callback) {\n\t callback(stringifyResult.error);\n\t }\n\t return null;\n\t }\n\t\n\t return stringifyResult.value;\n\t};\n\t\n\t/**\n\t *\n\t * @param jsonPayload\n\t * @param callback\n\t */\n\tApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.merge(oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\tfunction raw(payload, jsonBackup) {\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction selectFrames(frames, range) {\n\t var len = frames.length;\n\t if (len > range * 2) {\n\t return frames.slice(0, range).concat(frames.slice(len - range));\n\t }\n\t return frames;\n\t}\n\t\n\tfunction truncateFrames(payload, jsonBackup, range) {\n\t range = (typeof range === 'undefined') ? 30 : range;\n\t var body = payload.data.body;\n\t var frames;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t frames = chain[i].frames;\n\t frames = selectFrames(frames, range);\n\t chain[i].frames = frames;\n\t }\n\t } else if (body.trace) {\n\t frames = body.trace.frames;\n\t frames = selectFrames(frames, range);\n\t body.trace.frames = frames;\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction maybeTruncateValue(len, val) {\n\t if (!val) {\n\t return val;\n\t }\n\t if (val.length > len) {\n\t return val.slice(0, len - 3).concat('...');\n\t }\n\t return val;\n\t}\n\t\n\tfunction truncateStrings(len, payload, jsonBackup) {\n\t function truncator(k, v, seen) {\n\t switch (_.typeName(v)) {\n\t case 'string':\n\t return maybeTruncateValue(len, v);\n\t case 'object':\n\t case 'array':\n\t return _.traverse(v, truncator, seen);\n\t default:\n\t return v;\n\t }\n\t }\n\t payload = _.traverse(payload, truncator, []);\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction truncateTraceData(traceData) {\n\t if (traceData.exception) {\n\t delete traceData.exception.description;\n\t traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n\t }\n\t traceData.frames = selectFrames(traceData.frames, 1);\n\t return traceData;\n\t}\n\t\n\tfunction minBody(payload, jsonBackup) {\n\t var body = payload.data.body;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t chain[i] = truncateTraceData(chain[i]);\n\t }\n\t } else if (body.trace) {\n\t body.trace = truncateTraceData(body.trace);\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction needsTruncation(payload, maxSize) {\n\t return payload.length > maxSize;\n\t}\n\t\n\tfunction truncate(payload, jsonBackup, maxSize) {\n\t maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n\t var strategies = [\n\t raw,\n\t truncateFrames,\n\t truncateStrings.bind(null, 1024),\n\t truncateStrings.bind(null, 512),\n\t truncateStrings.bind(null, 256),\n\t minBody\n\t ];\n\t var strategy, results, result;\n\t\n\t while ((strategy = strategies.shift())) {\n\t results = strategy(payload, jsonBackup);\n\t payload = results[0];\n\t result = results[1];\n\t if (result.error || !needsTruncation(result.value, maxSize)) {\n\t return result;\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t truncate: truncate,\n\t\n\t /* for testing */\n\t raw: raw,\n\t truncateFrames: truncateFrames,\n\t truncateStrings: truncateStrings,\n\t maybeTruncateValue: maybeTruncateValue\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(14);\n\tvar detection = __webpack_require__(15);\n\tvar _ = __webpack_require__(4);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror) {\n\t oldOnError = window.onerror;\n\t while (oldOnError._rollbarOldOnError) {\n\t oldOnError = oldOnError._rollbarOldOnError;\n\t }\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t if (shim) {\n\t fn._rollbarOldOnError = oldOnError;\n\t }\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t // Ignore\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/*global XDomainRequest*/\n\t\n\tvar _ = __webpack_require__(4);\n\tvar truncation = __webpack_require__(12);\n\tvar logger = __webpack_require__(13);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n\t}\n\t\n\t// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n\t// so Angular change detection isn't triggered on each API call.\n\t// This is the equivalent of runOutsideAngular().\n\t//\n\tfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\t\n\t if (currentZone && currentZone._name === 'angular') {\n\t var rootZone = currentZone._parent;\n\t rootZone.run(function () {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t });\n\t } else {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t }\n\t}\n\t\n\t/* global RollbarProxy */\n\tfunction _proxyRequest(json, callback) {\n\t var rollbarProxy = new RollbarProxy();\n\t rollbarProxy.sendJsonPayload(\n\t json,\n\t function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n\t function(err) {\n\t callback(new Error(err));\n\t }\n\t );\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t if (typeof RollbarProxy !== 'undefined') {\n\t return _proxyRequest(data, callback);\n\t }\n\t\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post,\n\t postJsonPayload: postJsonPayload\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\tvar errorParser = __webpack_require__(20);\n\tvar logger = __webpack_require__(13);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e) {\n\t logger.error('Error while parsing the error object.', e);\n\t try {\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t } catch (e2) {\n\t item.message = String(item.err) || String(e2);\n\t }\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.merge(item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t var remoteString = '$remote_ip';\n\t if (!options.captureIp) {\n\t remoteString = null;\n\t } else if (options.captureIp !== true) {\n\t remoteString += '_anonymize';\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: remoteString\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.merge(custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (options.sendFrameUrl) {\n\t frame.url = stackFrame.url;\n\t }\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.merge(custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(21);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext();\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t var name = exception.constructor && exception.constructor.name;\n\t if (!name || !name.length || name.length < 3) {\n\t name = exception.name;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(22)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.merge(item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.merge(extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.merge(item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data, item);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(4);\n\tvar urlparser = __webpack_require__(18);\n\tvar domUtil = __webpack_require__(27);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction nameFromDescription(description) {\n\t if (!description || !description.attributes) { return null; }\n\t var attrs = description.attributes;\n\t for (var a = 0; a < attrs.length; ++a) {\n\t if (attrs[a].key === 'name') {\n\t return attrs[a].value;\n\t }\n\t }\n\t return null;\n\t}\n\t\n\tfunction defaultValueScrubber(scrubFields) {\n\t var patterns = [];\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t patterns.push(new RegExp(scrubFields[i], 'i'));\n\t }\n\t return function(description) {\n\t var name = nameFromDescription(description);\n\t if (!name) { return false; }\n\t for (var i = 0; i < patterns.length; ++i) {\n\t if (patterns[i].test(name)) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t };\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.merge(this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState < 2) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t }\n\t if (xhr.readyState > 3) {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber) {\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t } else if (this.defaultValueScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// rollbar.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap e604cb467002a39af472","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 0\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 4\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 5\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 12\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 13\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 16\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 18\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 20\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 22\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 27\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/rollbar.named-amd.js b/dist/rollbar.named-amd.js index 271674e08..739dfa302 100644 --- a/dist/rollbar.named-amd.js +++ b/dist/rollbar.named-amd.js @@ -511,7 +511,7 @@ define("rollbar", [], function() { return /******/ (function(modules) { // webpa /* global __DEFAULT_ENDPOINT__:false */ var defaultOptions = { - version: ("2.6.0"), + version: ("2.6.1"), scrubFields: (["pw","pass","passwd","password","secret","confirm_password","confirmPassword","password_confirmation","passwordConfirmation","access_token","accessToken","secret_key","secretKey","secretToken","cc-number","card number","cardnumber","cardnum","ccnum","ccnumber","cc num","creditcardnumber","credit card number","newcreditcardnumber","new credit card","creditcardno","credit card no","card#","card #","cc-csc","cvc2","cvv2","ccv2","security code","card verification","name on credit card","name on card","nameoncard","cardholder","card holder","name des karteninhabers","card type","cardtype","cc type","cctype","payment type","expiration date","expirationdate","expdate","cc-exp"]), logLevel: ("debug"), reportLevel: ("debug"), diff --git a/dist/rollbar.named-amd.js.map b/dist/rollbar.named-amd.js.map index 47c8094f7..136949ac4 100644 --- a/dist/rollbar.named-amd.js.map +++ b/dist/rollbar.named-amd.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap ce95c830db5fec019272","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/utility.js","webpack:///./src/merge.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/queue.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/truncation.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;;;;;;;ACvBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3bA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;;;;;;;AC3JA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChJA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB;AACA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oCAAmC,OAAO;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;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,oDAAmD,SAAS;AAC5D;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,aAAa;AAChC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACztBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;;AAEA,YAAW,YAAY;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClLA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACjGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtHA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AChIA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC7PA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACjQA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3GA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC,sBAAsB;AAC1D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iDAAgD,aAAa;AAC7D;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA,iBAAgB,cAAc;AAC9B,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;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,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;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,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrlBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.named-amd.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap ce95c830db5fec019272","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 14\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 15\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 18\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 20\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 22\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 27\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 28\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap caa68ed7e94fe6475af3","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/utility.js","webpack:///./src/merge.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/queue.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/truncation.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;;;;;;;ACvBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3bA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;;;;;;;AC3JA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChJA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB;AACA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oCAAmC,OAAO;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;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,oDAAmD,SAAS;AAC5D;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,aAAa;AAChC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACztBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;;AAEA,YAAW,YAAY;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClLA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACjGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtHA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AChIA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC7PA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACjQA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3GA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC,sBAAsB;AAC1D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iDAAgD,aAAa;AAC7D;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA,iBAAgB,cAAc;AAC9B,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;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,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;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,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrlBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.named-amd.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap caa68ed7e94fe6475af3","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 14\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 15\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 18\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 20\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 22\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 27\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 28\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/rollbar.named-amd.min.js b/dist/rollbar.named-amd.min.js index 308771208..b4323ed23 100644 --- a/dist/rollbar.named-amd.min.js +++ b/dist/rollbar.named-amd.min.js @@ -1,4 +1,4 @@ -define("rollbar",[],function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){t.exports=r(1)},function(t,e,r){"use strict";var n=r(2),o="undefined"!=typeof window&&window._rollbarConfig,i=o&&o.globalAlias||"Rollbar",a="undefined"!=typeof window&&window[i]&&"function"==typeof window[i].shimId&&void 0!==window[i].shimId();if("undefined"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),!a&&o){var s=new n(o);window[i]=s}else"undefined"!=typeof window?(window.rollbar=n,window._rollbarDidLoad=!0):"undefined"!=typeof self&&(self.rollbar=n,self._rollbarDidLoad=!0);t.exports=n},function(t,e,r){"use strict";function n(t,e){this.options=c.handleOptions(x,t);var r=new l(this.options,h,d);this.client=e||new u(this.options,r,p,"browser");var n="undefined"!=typeof window&&window||"undefined"!=typeof self&&self,o="undefined"!=typeof document&&document;i(this.client.notifier,n),a(this.client.queue),(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(f.captureUncaughtExceptions(n,this),f.wrapGlobals(n,this)),(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&f.captureUnhandledRejections(n,this),this.instrumenter=new w(this.options,this.client.telemeter,this,n,o),this.instrumenter.instrument()}function o(t){var e="Rollbar is not initialized";p.error(e),t&&t(new Error(e))}function i(t,e){t.addTransform(m.handleItemWithError).addTransform(m.ensureItemHasSomethingToSay).addTransform(m.addBaseInfo).addTransform(m.addRequestInfo(e)).addTransform(m.addClientInfo(e)).addTransform(m.addPluginInfo(e)).addTransform(m.addBody).addTransform(g.addMessageWithError).addTransform(g.addTelemetryData).addTransform(g.addConfigToPayload).addTransform(m.scrubPayload).addTransform(g.userTransform(p)).addTransform(g.itemToPayload)}function a(t){t.addPredicate(y.checkLevel).addPredicate(v.checkIgnore).addPredicate(y.userCheckIgnore(p)).addPredicate(y.urlIsNotBlacklisted(p)).addPredicate(y.urlIsWhitelisted(p)).addPredicate(y.messageIsIgnored(p))}function s(t){for(var e=0,r=t.length;e=1&&r>e}function i(t,e,r,n,o,i,s){var u=null;return r&&(r=new Error(r)),r||n||(u=a(t,e,o,i,s)),{error:r,shouldSend:n,payload:u}}function a(t,e,r,n,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:r,itemsPerMinute:n}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}var s=r(5);n.globalSettings={startTime:s.now(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||s.now();var r=e-this.startTime;(r<0||r>=6e4)&&(this.startTime=e,this.perMinCounter=0);var a=n.globalSettings.maxItems,u=n.globalSettings.itemsPerMinute;if(o(t,a,this.counter))return i(this.platform,this.platformOptions,a+" max items reached",!1);if(o(t,u,this.perMinCounter))return i(this.platform,this.platformOptions,u+" items per minute reached",!1);this.counter++,this.perMinCounter++;var c=!o(t,a,this.counter),l=c;return c=c&&!o(t,u,this.perMinCounter),i(this.platform,this.platformOptions,null,c,a,u,l)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,r){"use strict";function n(){if(!q&&(q=!0,c(JSON)&&(s(JSON.stringify)&&(F.stringify=JSON.stringify),s(JSON.parse)&&(F.parse=JSON.parse)),!a(F.stringify)||!a(F.parse))){var t=r(7);t(F)}}function o(t,e){return e===i(t)}function i(t){var e=typeof t;return"object"!==e?e:t?t instanceof Error?"error":{}.toString.call(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase():"null"}function a(t){return o(t,"function")}function s(t){var e=/[\\^$.*+?()[\]{}|]/g,r=Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?"),n=RegExp("^"+r+"$");return u(t)&&n.test(t)}function u(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function c(t){return!o(t,"undefined")}function l(t){var e=i(t);return"object"===e||"array"===e}function p(t){return o(t,"error")||o(t,"exception")}function f(t,e,r){var n,i,a,s=o(t,"object"),u=o(t,"array"),c=[];if(s&&r.indexOf(t)!==-1)return t;if(r.push(t),s)for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&c.push(n);else if(u)for(a=0;as)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var r=e+"//"+t.hostname;return t.port&&(r=r+":"+t.port),t.path&&(r+=t.path),r}function b(t,e){var r,n;try{r=F.stringify(t)}catch(o){if(e&&a(e))try{r=e(t)}catch(t){n=t}else n=o}return{error:n,value:r}}function w(t){var e,r;try{e=F.parse(t)}catch(t){r=t}return{error:r,value:e}}function _(t,e,r,n,o,i,a,s){var u={url:e||"",line:r,column:n};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(r,n){try{e(r,n)}catch(e){t.error(e)}}}function k(t,e,r,n,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=A(u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:P(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),n&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){for(var r=0;r500&&(n=n.substr(0,497)+"...");break;case"null":n="null";break;case"undefined":n="undefined";break;case"symbol":n=n.toString()}o.push(n)}return o.join(" ")}function P(){return Date.now?+Date.now():+new Date}function R(t,e){if(t&&t.user_ip&&e!==!0){var r=t.user_ip;if(e)try{var n;if(r.indexOf(".")!==-1)n=r.split("."),n.pop(),n.push("0"),r=n.join(".");else if(r.indexOf(":")!==-1){if(n=r.split(":"),n.length>2){var o=n.slice(0,3),i=o[2].indexOf("/");i!==-1&&(o[2]=o[2].substring(0,i));var a="0000:0000:0000:0000:0000";r=o.concat(a).join(":")}}else r=null}catch(t){r=null}else r=null;t.user_ip=r}}function j(t,e,r){var n=A(t,e,r);return!e||e.overwriteScrubFields?n:(e.scrubFields&&(n.scrubFields=(t.scrubFields||[]).concat(e.scrubFields)),n)}var A=r(6),F={},q=!1;n();var D={debug:0,info:1,warning:2,error:3,critical:4},M={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},U=["log","network","dom","navigation","error","manual"],H=["critical","error","warning","info","debug"];t.exports={addParamsAndAccessTokenToPath:v,createItem:k,createTelemetryEvent:I,filterIp:R,formatArgsAsString:C,formatUrl:y,get:T,handleOptions:j,isError:p,isFunction:a,isIterable:l,isNativeFunction:s,isType:o,jsonParse:w,LEVELS:D,makeUnhandledStackInfo:_,merge:A,now:P,redact:h,sanitizeUrl:m,scrub:O,set:S,stringify:b,traverse:f,typeName:i,uuid4:d}},function(t,e){"use strict";function r(){var t,e,n,o,a,s={},u=null,c=arguments.length;for(t=0;tn&&(o=this.maxQueueSize-n),this.maxQueueSize=n,this.queue.splice(0,o)},n.prototype.copyEvents=function(){var t=Array.prototype.slice.call(this.queue,0);if(i.isFunction(this.options.filterTelemetry))try{for(var e=t.length;e--;)this.options.filterTelemetry(t[e])&&t.splice(e,1)}catch(t){this.options.filterTelemetry=null}return t},n.prototype.capture=function(t,e,r,n,a){var s={level:o(t,r),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};n&&(s.uuid=n);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},n.prototype.captureEvent=function(t,e,r,n){return this.capture(t,e,r,n)},n.prototype.captureError=function(t,e,r,n){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,r,n)},n.prototype.captureLog=function(t,e,r,n){return this.capture("log",{message:t},e,r,n)},n.prototype.captureNetwork=function(t,e,r,n){e=e||"xhr",t.subtype=t.subtype||e,n&&(t.request=n);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,r)},n.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},n.prototype.captureDom=function(t,e,r,n,o){var i={subtype:t,element:e};return void 0!==r&&(i.value=r),void 0!==n&&(i.checked=n),this.capture("dom",i,"info",o)},n.prototype.captureNavigation=function(t,e,r){return this.capture("navigation",{from:t,to:e},"info",r)},n.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},n.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},n.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},n.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},n.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=n},function(t,e,r){"use strict";function n(t,e,r,n){this.options=t,this.transport=e,this.url=r,this.jsonBackup=n,this.accessToken=t.accessToken,this.transportOptions=o(t,r)}function o(t,e){return a.getTransportFromOptions(t,u,e)}var i=r(5),a=r(12),s=r(13),u={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};n.prototype.postItem=function(t,e){var r=a.transportOptions(this.transportOptions,"POST"),n=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,r,n,e)},n.prototype.buildJsonPayload=function(t,e){var r=a.buildPayload(this.accessToken,t,this.jsonBackup),n=s.truncate(r);return n.error?(e&&e(n.error),null):n.value},n.prototype.postJsonPayload=function(t,e){var r=a.transportOptions(this.transportOptions,"POST");this.transport.postJsonPayload(this.accessToken,r,t,e)},n.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.merge(e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=n; +define("rollbar",[],function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){t.exports=r(1)},function(t,e,r){"use strict";var n=r(2),o="undefined"!=typeof window&&window._rollbarConfig,i=o&&o.globalAlias||"Rollbar",a="undefined"!=typeof window&&window[i]&&"function"==typeof window[i].shimId&&void 0!==window[i].shimId();if("undefined"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),!a&&o){var s=new n(o);window[i]=s}else"undefined"!=typeof window?(window.rollbar=n,window._rollbarDidLoad=!0):"undefined"!=typeof self&&(self.rollbar=n,self._rollbarDidLoad=!0);t.exports=n},function(t,e,r){"use strict";function n(t,e){this.options=c.handleOptions(x,t);var r=new l(this.options,h,d);this.client=e||new u(this.options,r,p,"browser");var n="undefined"!=typeof window&&window||"undefined"!=typeof self&&self,o="undefined"!=typeof document&&document;i(this.client.notifier,n),a(this.client.queue),(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(f.captureUncaughtExceptions(n,this),f.wrapGlobals(n,this)),(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&f.captureUnhandledRejections(n,this),this.instrumenter=new w(this.options,this.client.telemeter,this,n,o),this.instrumenter.instrument()}function o(t){var e="Rollbar is not initialized";p.error(e),t&&t(new Error(e))}function i(t,e){t.addTransform(m.handleItemWithError).addTransform(m.ensureItemHasSomethingToSay).addTransform(m.addBaseInfo).addTransform(m.addRequestInfo(e)).addTransform(m.addClientInfo(e)).addTransform(m.addPluginInfo(e)).addTransform(m.addBody).addTransform(g.addMessageWithError).addTransform(g.addTelemetryData).addTransform(g.addConfigToPayload).addTransform(m.scrubPayload).addTransform(g.userTransform(p)).addTransform(g.itemToPayload)}function a(t){t.addPredicate(y.checkLevel).addPredicate(v.checkIgnore).addPredicate(y.userCheckIgnore(p)).addPredicate(y.urlIsNotBlacklisted(p)).addPredicate(y.urlIsWhitelisted(p)).addPredicate(y.messageIsIgnored(p))}function s(t){for(var e=0,r=t.length;e=1&&r>e}function i(t,e,r,n,o,i,s){var u=null;return r&&(r=new Error(r)),r||n||(u=a(t,e,o,i,s)),{error:r,shouldSend:n,payload:u}}function a(t,e,r,n,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:r,itemsPerMinute:n}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}var s=r(5);n.globalSettings={startTime:s.now(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||s.now();var r=e-this.startTime;(r<0||r>=6e4)&&(this.startTime=e,this.perMinCounter=0);var a=n.globalSettings.maxItems,u=n.globalSettings.itemsPerMinute;if(o(t,a,this.counter))return i(this.platform,this.platformOptions,a+" max items reached",!1);if(o(t,u,this.perMinCounter))return i(this.platform,this.platformOptions,u+" items per minute reached",!1);this.counter++,this.perMinCounter++;var c=!o(t,a,this.counter),l=c;return c=c&&!o(t,u,this.perMinCounter),i(this.platform,this.platformOptions,null,c,a,u,l)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,r){"use strict";function n(){if(!q&&(q=!0,c(JSON)&&(s(JSON.stringify)&&(F.stringify=JSON.stringify),s(JSON.parse)&&(F.parse=JSON.parse)),!a(F.stringify)||!a(F.parse))){var t=r(7);t(F)}}function o(t,e){return e===i(t)}function i(t){var e=typeof t;return"object"!==e?e:t?t instanceof Error?"error":{}.toString.call(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase():"null"}function a(t){return o(t,"function")}function s(t){var e=/[\\^$.*+?()[\]{}|]/g,r=Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?"),n=RegExp("^"+r+"$");return u(t)&&n.test(t)}function u(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function c(t){return!o(t,"undefined")}function l(t){var e=i(t);return"object"===e||"array"===e}function p(t){return o(t,"error")||o(t,"exception")}function f(t,e,r){var n,i,a,s=o(t,"object"),u=o(t,"array"),c=[];if(s&&r.indexOf(t)!==-1)return t;if(r.push(t),s)for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&c.push(n);else if(u)for(a=0;as)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var r=e+"//"+t.hostname;return t.port&&(r=r+":"+t.port),t.path&&(r+=t.path),r}function b(t,e){var r,n;try{r=F.stringify(t)}catch(o){if(e&&a(e))try{r=e(t)}catch(t){n=t}else n=o}return{error:n,value:r}}function w(t){var e,r;try{e=F.parse(t)}catch(t){r=t}return{error:r,value:e}}function _(t,e,r,n,o,i,a,s){var u={url:e||"",line:r,column:n};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(r,n){try{e(r,n)}catch(e){t.error(e)}}}function k(t,e,r,n,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=A(u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:P(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),n&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){for(var r=0;r500&&(n=n.substr(0,497)+"...");break;case"null":n="null";break;case"undefined":n="undefined";break;case"symbol":n=n.toString()}o.push(n)}return o.join(" ")}function P(){return Date.now?+Date.now():+new Date}function R(t,e){if(t&&t.user_ip&&e!==!0){var r=t.user_ip;if(e)try{var n;if(r.indexOf(".")!==-1)n=r.split("."),n.pop(),n.push("0"),r=n.join(".");else if(r.indexOf(":")!==-1){if(n=r.split(":"),n.length>2){var o=n.slice(0,3),i=o[2].indexOf("/");i!==-1&&(o[2]=o[2].substring(0,i));var a="0000:0000:0000:0000:0000";r=o.concat(a).join(":")}}else r=null}catch(t){r=null}else r=null;t.user_ip=r}}function j(t,e,r){var n=A(t,e,r);return!e||e.overwriteScrubFields?n:(e.scrubFields&&(n.scrubFields=(t.scrubFields||[]).concat(e.scrubFields)),n)}var A=r(6),F={},q=!1;n();var D={debug:0,info:1,warning:2,error:3,critical:4},M={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},U=["log","network","dom","navigation","error","manual"],H=["critical","error","warning","info","debug"];t.exports={addParamsAndAccessTokenToPath:v,createItem:k,createTelemetryEvent:I,filterIp:R,formatArgsAsString:C,formatUrl:y,get:T,handleOptions:j,isError:p,isFunction:a,isIterable:l,isNativeFunction:s,isType:o,jsonParse:w,LEVELS:D,makeUnhandledStackInfo:_,merge:A,now:P,redact:h,sanitizeUrl:m,scrub:O,set:S,stringify:b,traverse:f,typeName:i,uuid4:d}},function(t,e){"use strict";function r(){var t,e,n,o,a,s={},u=null,c=arguments.length;for(t=0;tn&&(o=this.maxQueueSize-n),this.maxQueueSize=n,this.queue.splice(0,o)},n.prototype.copyEvents=function(){var t=Array.prototype.slice.call(this.queue,0);if(i.isFunction(this.options.filterTelemetry))try{for(var e=t.length;e--;)this.options.filterTelemetry(t[e])&&t.splice(e,1)}catch(t){this.options.filterTelemetry=null}return t},n.prototype.capture=function(t,e,r,n,a){var s={level:o(t,r),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};n&&(s.uuid=n);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},n.prototype.captureEvent=function(t,e,r,n){return this.capture(t,e,r,n)},n.prototype.captureError=function(t,e,r,n){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,r,n)},n.prototype.captureLog=function(t,e,r,n){return this.capture("log",{message:t},e,r,n)},n.prototype.captureNetwork=function(t,e,r,n){e=e||"xhr",t.subtype=t.subtype||e,n&&(t.request=n);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,r)},n.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},n.prototype.captureDom=function(t,e,r,n,o){var i={subtype:t,element:e};return void 0!==r&&(i.value=r),void 0!==n&&(i.checked=n),this.capture("dom",i,"info",o)},n.prototype.captureNavigation=function(t,e,r){return this.capture("navigation",{from:t,to:e},"info",r)},n.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},n.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},n.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},n.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},n.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=n},function(t,e,r){"use strict";function n(t,e,r,n){this.options=t,this.transport=e,this.url=r,this.jsonBackup=n,this.accessToken=t.accessToken,this.transportOptions=o(t,r)}function o(t,e){return a.getTransportFromOptions(t,u,e)}var i=r(5),a=r(12),s=r(13),u={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};n.prototype.postItem=function(t,e){var r=a.transportOptions(this.transportOptions,"POST"),n=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,r,n,e)},n.prototype.buildJsonPayload=function(t,e){var r=a.buildPayload(this.accessToken,t,this.jsonBackup),n=s.truncate(r);return n.error?(e&&e(n.error),null):n.value},n.prototype.postJsonPayload=function(t,e){var r=a.transportOptions(this.transportOptions,"POST");this.transport.postJsonPayload(this.accessToken,r,t,e)},n.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.merge(e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=n; },function(t,e,r){"use strict";function n(t,e,r){if(!s.isType(e.context,"string")){var n=s.stringify(e.context,r);n.error?e.context="Error: could not serialize 'context'":e.context=n.value||"",e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}}function o(t,e,r){var n=e.hostname,o=e.protocol,i=e.port,a=e.path,s=e.search,u=t.proxy;if(t.endpoint){var c=r.parse(t.endpoint);n=c.hostname,o=c.protocol,i=c.port,a=c.pathname,s=c.search}return{hostname:n,protocol:o,port:i,path:a,search:s,proxy:u}}function i(t,e){var r=t.protocol||"https:",n=t.port||("http:"===r?80:"https:"===r?443:void 0),o=t.hostname,i=t.path;return t.search&&(i+=t.search),t.proxy&&(i=r+"//"+o+i,o=t.proxy.host||t.proxy.hostname,n=t.proxy.port,r=t.proxy.protocol||r),{protocol:r,hostname:o,path:i,port:n,method:e}}function a(t,e){var r=/\/$/.test(t),n=/^\//.test(e);return r&&n?e=e.substring(1):r||n||(e="/"+e),t+e}var s=r(5);t.exports={buildPayload:n,getTransportFromOptions:o,transportOptions:i,appendPathToPath:a}},function(t,e,r){"use strict";function n(t,e){return[t,f.stringify(t,e)]}function o(t,e){var r=t.length;return r>2*e?t.slice(0,e).concat(t.slice(r-e)):t}function i(t,e,r){r="undefined"==typeof r?30:r;var n,i=t.data.body;if(i.trace_chain)for(var a=i.trace_chain,s=0;st?e.slice(0,t-3).concat("..."):e}function s(t,e,r){function n(e,r,o){switch(f.typeName(r)){case"string":return a(t,r);case"object":case"array":return f.traverse(r,n,o);default:return r}}return e=f.traverse(e,n,[]),[e,f.stringify(e,r)]}function u(t){return t.exception&&(delete t.exception.description,t.exception.message=a(255,t.exception.message)),t.frames=o(t.frames,1),t}function c(t,e){var r=t.data.body;if(r.trace_chain)for(var n=r.trace_chain,o=0;oe}function p(t,e,r){r="undefined"==typeof r?524288:r;for(var o,a,u,p=[n,i,s.bind(null,1024),s.bind(null,512),s.bind(null,256),c];o=p.shift();)if(a=o(t,e),t=a[0],u=a[1],u.error||!l(u.value,r))return u;return u}var f=r(5);t.exports={truncate:p,raw:n,truncateFrames:i,truncateStrings:s,maybeTruncateValue:a}},function(t,e,r){"use strict";function n(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.error(s.formatArgsAsString(t)):console.error.apply(console,t)}function o(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.info(s.formatArgsAsString(t)):console.info.apply(console,t)}function i(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.log(s.formatArgsAsString(t)):console.log.apply(console,t)}r(15);var a=r(16),s=r(5);t.exports={error:n,info:o,log:i}},function(t,e){!function(t){"use strict";t.console||(t.console={});for(var e,r,n=t.console,o=function(){},i=["memory"],a="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");e=i.pop();)n[e]||(n[e]={});for(;r=a.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window)},function(t,e){"use strict";function r(){var t;if(!document)return t;for(var e=3,r=document.createElement("div"),n=r.getElementsByTagName("i");r.innerHTML="",n[0];);return e>4?e:t}var n={ieVersion:r};t.exports=n},function(t,e){"use strict";function r(t,e,r){if(t){var o;if("function"==typeof e._rollbarOldOnError)o=e._rollbarOldOnError;else if(t.onerror){for(o=t.onerror;o._rollbarOldOnError;)o=o._rollbarOldOnError;e._rollbarOldOnError=o}var i=function(){var r=Array.prototype.slice.call(arguments,0);n(t,e,o,r)};r&&(i._rollbarOldOnError=o),t.onerror=i}}function n(t,e,r,n){t._rollbarWrappedError&&(n[4]||(n[4]=t._rollbarWrappedError),n[5]||(n[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null),e.handleUncaughtException.apply(e,n),r&&r.apply(t,n)}function o(t,e,r){if(t){"function"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener("unhandledrejection",t._rollbarURH);var n=function(t){var r,n,o;try{r=t.reason}catch(t){r=void 0}try{n=t.promise}catch(t){n="[unhandledrejection] error getting `promise` from event"}try{o=t.detail,!r&&o&&(r=o.reason,n=o.promise)}catch(t){}r||(r="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(r,n)};n.belongsToShim=r,t._rollbarURH=n,t.addEventListener("unhandledrejection",n)}}function i(t,e,r){if(t){var n,o,i="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(n=0;n=400&&t.status<600}function f(t,e){var r=new Error(t);return r.code=e||"ENOTFOUND",r}var h=r(5),d=r(13),m=r(14);t.exports={get:n,post:o,postJsonPayload:i}},function(t,e){"use strict";function r(t){var e,r,n={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(e=t.indexOf("//"),e!==-1?(n.protocol=t.substring(0,e),r=e+2):r=0,e=t.indexOf("@",r),e!==-1&&(n.auth=t.substring(r,e),r=e+1),e=t.indexOf("/",r),e===-1){if(e=t.indexOf("?",r),e===-1)return e=t.indexOf("#",r),e===-1?n.host=t.substring(r):(n.host=t.substring(r,e),n.hash=t.substring(e)),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),n;n.host=t.substring(r,e),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),r=e}else n.host=t.substring(r,e),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),r=e;if(e=t.indexOf("#",r),e===-1?n.path=t.substring(r):(n.path=t.substring(r,e),n.hash=t.substring(e)),n.path){var o=n.path.split("?");n.pathname=o[0],n.query=o[1],n.search=n.query?"?"+n.query:null}return n}t.exports={parse:r}},function(t,e,r){"use strict";function n(t,e,r){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||d.parse(t.err)}catch(e){m.error("Error while parsing the error object.",e);try{t.message=t.err.message||t.err.description||t.message||String(t.err)}catch(e){t.message=String(t.err)||String(e)}delete t.err}r(null,t)}function o(t,e,r){t.message||t.stackInfo||t.custom||r(new Error("No message, stack info, or custom data"),null),r(null,t)}function i(t,e,r){var n=e.payload&&e.payload.environment||e.environment;t.data=h.merge(t.data,{environment:n,level:t.level,endpoint:e.endpoint,platform:"browser",framework:"browser-js",language:"javascript",server:{},uuid:t.uuid,notifier:{name:"rollbar-browser-js",version:e.version}}),r(null,t)}function a(t){return function(e,r,n){if(!t||!t.location)return n(null,e);var o="$remote_ip";r.captureIp?r.captureIp!==!0&&(o+="_anonymize"):o=null,h.set(e,"data.request",{url:t.location.href,query_string:t.location.search,user_ip:o}),n(null,e)}}function s(t){return function(e,r,n){if(!t)return n(null,e);var o=t.navigator||{},i=t.screen||{};h.set(e,"data.client",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:o.userAgent,language:o.language,cookie_enabled:o.cookieEnabled,screen:{width:i.width,height:i.height}}}),n(null,e)}}function u(t){return function(e,r,n){if(!t||!t.navigator)return n(null,e);for(var o,i=[],a=t.navigator.plugins||[],s=0,u=a.length;s-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),n=this.extractLocation(r.pop()),o=r.join(" ")||void 0,i="eval"===n[0]?void 0:n[0];return new t(o,void 0,i,n[1],n[2],e)},this)},parseFFOrSafari:function(n){var o=r(n.stack.split("\n"),function(t){return!t.match(i)},this);return e(o,function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new t(e);var r=e.split("@"),n=this.extractLocation(r.pop()),o=r.shift()||void 0;return new t(o,void 0,n[0],n[1],n[2],e)},this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf("\n")>-1&&t.message.split("\n").length>t.stacktrace.split("\n").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,n=e.message.split("\n"),o=[],i=2,a=n.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new t(a,s,o[0],o[1],o[2],e)},this)}}})},function(t,e,r){var n,o,i;!function(r,a){"use strict";o=[],n=a,i="function"==typeof n?n.apply(e,o):n,!(void 0!==i&&(t.exports=i))}(this,function(){"use strict";function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t,e,r,n,o,i){void 0!==t&&this.setFunctionName(t),void 0!==e&&this.setArgs(e),void 0!==r&&this.setFileName(r),void 0!==n&&this.setLineNumber(n),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return e.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(t){this.functionName=String(t)},getArgs:function(){return this.args},setArgs:function(t){if("[object Array]"!==Object.prototype.toString.call(t))throw new TypeError("Args must be an Array");this.args=t},getFileName:function(){return this.fileName},setFileName:function(t){this.fileName=String(t)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(e){if(!t(e))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(e)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(e){if(!t(e))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(e)},getSource:function(){return this.source},setSource:function(t){this.source=String(t)},toString:function(){var e=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",n=this.getFileName()?"@"+this.getFileName():"",o=t(this.getLineNumber())?":"+this.getLineNumber():"",i=t(this.getColumnNumber())?":"+this.getColumnNumber():"";return e+r+n+o+i}},e})},function(t,e,r){"use strict";function n(t,e,r){var n=e.payload||{};n.body&&delete n.body;var o=u.merge(t.data,n);t._isUncaught&&(o._isUncaught=!0),t._originalArgs&&(o._originalArgs=t._originalArgs),r(null,o)}function o(t,e,r){t.telemetryEvents&&u.set(t,"data.body.telemetry",t.telemetryEvents),r(null,t)}function i(t,e,r){if(!t.message)return void r(null,t);var n="data.body.trace_chain.0",o=u.get(t,n);if(o||(n="data.body.trace",o=u.get(t,n)),o){if(!o.exception||!o.exception.description)return u.set(t,n+".exception.description",t.message),void r(null,t);var i=u.get(t,n+".extra")||{},a=u.merge(i,{message:t.message});u.set(t,n+".extra",a)}r(null,t)}function a(t){return function(e,r,n){var o=u.merge(e);try{u.isFunction(r.transform)&&r.transform(o.data,e)}catch(o){return r.transform=null,t.error("Error while calling custom transform() function. Removing custom transform().",o),void n(null,e)}n(null,o)}}function s(t,e,r){if(!e.sendConfig)return r(null,t);var n="_rollbarConfig",o=u.get(t,"data.custom")||{};o[n]=e,t.data.custom=o,r(null,t)}var u=r(5);t.exports={itemToPayload:n,addTelemetryData:o,addMessageWithError:i,userTransform:a,addConfigToPayload:s}},function(t,e,r){"use strict";function n(t,e){return!o.get(e,"plugins.jquery.ignoreAjaxErrors")||!o.get(t,"body.message.extra.isAjax")}var o=r(5);t.exports={checkIgnore:n}},function(t,e,r){"use strict";function n(t,e){var r=t.level,n=c.LEVELS[r]||0,o=e.reportLevel,i=c.LEVELS[o]||0;return!(n3){a.__rollbar_xhr.end_time_ms=u.now();var r=null;if(e.autoInstrument.networkResponseHeaders){var n=e.autoInstrument.networkResponseHeaders;r={};try{var i,s;if(n===!0){var c=a.getAllResponseHeaders();if(c){var l,p,f=c.trim().split(/[\r\n]+/);for(s=0;s=0&&t.options[t.selectedIndex]&&this.captureDomEvent("input",t,t.options[t.selectedIndex].value)},s.prototype.captureDomEvent=function(t,e,r,n){if(void 0!==r)if(this.scrubTelemetryInputs||"password"===l.getElementType(e))r="[scrubbed]";else{var o=l.describeElement(e);this.telemetryScrubber?this.telemetryScrubber(o)&&(r="[scrubbed]"):this.defaultValueScrubber(o)&&(r="[scrubbed]")}var i=l.elementArrayToString(l.treeToArray(e));this.telemeter.captureDom(t,i,r,n)},s.prototype.deinstrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,r=!e&&this._window.history&&this._window.history.pushState;r&&o(this.replacements,"navigation")},s.prototype.instrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,r=!e&&this._window.history&&this._window.history.pushState;if(r){var o=this;n(this._window,"onpopstate",function(t){return function(){var e=o._location.href;o.handleUrlChange(o._lastHref,e),t&&t.apply(this,arguments)}},this.replacements,"navigation"),n(this._window.history,"pushState",function(t){return function(){var e=arguments.length>2?arguments[2]:void 0;return e&&o.handleUrlChange(o._lastHref,e+""),t.apply(this,arguments)}},this.replacements,"navigation")}},s.prototype.handleUrlChange=function(t,e){var r=c.parse(this._location.href),n=c.parse(e),o=c.parse(t);this._lastHref=e,r.protocol===n.protocol&&r.host===n.host&&(e=n.path+(n.hash||"")),r.protocol===o.protocol&&r.host===o.host&&(t=o.path+(o.hash||"")),this.telemeter.captureNavigation(t,e)},s.prototype.deinstrumentConnectivity=function(){("addEventListener"in this._window||"body"in this._document)&&(this._window.addEventListener?this.removeListeners("connectivity"):o(this.replacements,"connectivity"))},s.prototype.instrumentConnectivity=function(){if("addEventListener"in this._window||"body"in this._document)if(this._window.addEventListener)this.addListener("connectivity",this._window,"online",void 0,function(){this.telemeter.captureConnectivityChange("online")}.bind(this),!0),this.addListener("connectivity",this._window,"offline",void 0,function(){this.telemeter.captureConnectivityChange("offline")}.bind(this),!0);else{var t=this;n(this._document.body,"ononline",function(e){return function(){t.telemeter.captureConnectivityChange("online"),e&&e.apply(this,arguments)}},this.replacements,"connectivity"),n(this._document.body,"onoffline",function(e){return function(){t.telemeter.captureConnectivityChange("offline"),e&&e.apply(this,arguments)}},this.replacements,"connectivity")}},s.prototype.addListener=function(t,e,r,n,o,i){e.addEventListener?(e.addEventListener(r,o,i),this.eventRemovers[t].push(function(){e.removeEventListener(r,o,i)})):n&&(e.attachEvent(n,o),this.eventRemovers[t].push(function(){e.detachEvent(n,o)}))},s.prototype.removeListeners=function(t){for(var e;this.eventRemovers[t].length;)(e=this.eventRemovers[t].shift())()},t.exports=s},function(t,e){"use strict";function r(t){return(t.getAttribute("type")||"").toLowerCase()}function n(t,e,n){if(t.tagName.toLowerCase()!==e.toLowerCase())return!1;if(!n)return!0;t=r(t);for(var o=0;o ",i=o.length,a=[],u=0,c=t.length-1;c>=0;c--){ if(e=s(t[c]),r=u+a.length*i+e.length,c=n+3){a.unshift("...");break}a.unshift(e),u+=e.length}return a.join(o)}function s(t){if(!t||!t.tagName)return"";var e=[t.tagName];t.id&&e.push("#"+t.id),t.classes&&e.push("."+t.classes.join("."));for(var r=0;r= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar merge = __webpack_require__(6);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(7);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t // Detect both Error and Firefox Exception type\n\t return isType(e, 'error') || isType(e, 'exception');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t var same = true;\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t same = same && result[k] === obj[k];\n\t }\n\t\n\t return (keys.length != 0 && !same) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t if (!baseUrlParts) {\n\t return '(unknown)';\n\t }\n\t\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t return undefined;\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t\n\t for (var i = 0, l = o.key.length; i < l; ++i) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t case 'exception': // Firefox Exception type\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = merge(custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\tvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\n\tvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\t\n\tfunction arrayIncludes(arr, val) {\n\t for (var k = 0; k < arr.length; ++k) {\n\t if (arr[k] === val) {\n\t return true;\n\t }\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction createTelemetryEvent(args) {\n\t var type, metadata, level;\n\t var arg;\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'string':\n\t if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n\t type = arg;\n\t } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n\t level = arg;\n\t }\n\t break;\n\t case 'object':\n\t metadata = arg;\n\t break;\n\t default:\n\t break;\n\t }\n\t }\n\t var event = {\n\t type: type || 'manual',\n\t metadata: metadata || {},\n\t level: level\n\t };\n\t\n\t return event;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len - 1; ++i) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart) {\n\t return paramPart + redact();\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact();\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; ++i) {\n\t arg = args[i];\n\t switch (typeName(arg)) {\n\t case 'object':\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500) {\n\t arg = arg.substr(0, 497) + '...';\n\t }\n\t break;\n\t case 'null':\n\t arg = 'null';\n\t break;\n\t case 'undefined':\n\t arg = 'undefined';\n\t break;\n\t case 'symbol':\n\t arg = arg.toString();\n\t break;\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tfunction filterIp(requestData, captureIp) {\n\t if (!requestData || !requestData['user_ip'] || captureIp === true) {\n\t return;\n\t }\n\t var newIp = requestData['user_ip'];\n\t if (!captureIp) {\n\t newIp = null;\n\t } else {\n\t try {\n\t var parts;\n\t if (newIp.indexOf('.') !== -1) {\n\t parts = newIp.split('.');\n\t parts.pop();\n\t parts.push('0');\n\t newIp = parts.join('.');\n\t } else if (newIp.indexOf(':') !== -1) {\n\t parts = newIp.split(':');\n\t if (parts.length > 2) {\n\t var beginning = parts.slice(0, 3);\n\t var slashIdx = beginning[2].indexOf('/');\n\t if (slashIdx !== -1) {\n\t beginning[2] = beginning[2].substring(0, slashIdx);\n\t }\n\t var terminal = '0000:0000:0000:0000:0000';\n\t newIp = beginning.concat(terminal).join(':');\n\t }\n\t } else {\n\t newIp = null;\n\t }\n\t } catch (e) {\n\t newIp = null;\n\t }\n\t }\n\t requestData['user_ip'] = newIp;\n\t}\n\t\n\tfunction handleOptions(current, input, payload) {\n\t var result = merge(current, input, payload);\n\t if (!input || input.overwriteScrubFields) {\n\t return result;\n\t }\n\t if (input.scrubFields) {\n\t result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t createItem: createItem,\n\t createTelemetryEvent: createTelemetryEvent,\n\t filterIp: filterIp,\n\t formatArgsAsString: formatArgsAsString,\n\t formatUrl: formatUrl,\n\t get: get,\n\t handleOptions: handleOptions,\n\t isError: isError,\n\t isFunction: isFunction,\n\t isIterable: isIterable,\n\t isNativeFunction: isNativeFunction,\n\t isType: isType,\n\t jsonParse: jsonParse,\n\t LEVELS: LEVELS,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t merge: merge,\n\t now: now,\n\t redact: redact,\n\t sanitizeUrl: sanitizeUrl,\n\t scrub: scrub,\n\t set: set,\n\t stringify: stringify,\n\t traverse: traverse,\n\t typeName: typeName,\n\t uuid4: uuid4\n\t};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tfunction merge() {\n\t var i, src, copy, clone, name,\n\t result = {},\n\t current = null,\n\t length = arguments.length;\n\t\n\t for (i=0; i < length; i++) {\n\t current = arguments[i];\n\t if (current == null) {\n\t continue;\n\t }\n\t\n\t for (name in current) {\n\t src = result[name];\n\t copy = current[name];\n\t if (result !== copy) {\n\t if (copy && isPlainObject(copy)) {\n\t clone = src && isPlainObject(src) ? src : {};\n\t result[name] = merge(clone, copy);\n\t } else if (typeof copy !== 'undefined') {\n\t result[name] = copy;\n\t }\n\t }\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = merge;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.merge(options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t var events = Array.prototype.slice.call(this.queue, 0);\n\t if (_.isFunction(this.options.filterTelemetry)) {\n\t try {\n\t var i = events.length;\n\t while (i--) {\n\t if (this.options.filterTelemetry(events[i])) {\n\t events.splice(i, 1);\n\t }\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t }\n\t return events;\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (exc) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n\t return this.capture(type, metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar helpers = __webpack_require__(12);\n\tvar truncation = __webpack_require__(13);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.buildJsonPayload = function(data, callback) {\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t if (callback) {\n\t callback(stringifyResult.error);\n\t }\n\t return null;\n\t }\n\t\n\t return stringifyResult.value;\n\t};\n\t\n\t/**\n\t *\n\t * @param jsonPayload\n\t * @param callback\n\t */\n\tApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.merge(oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction raw(payload, jsonBackup) {\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction selectFrames(frames, range) {\n\t var len = frames.length;\n\t if (len > range * 2) {\n\t return frames.slice(0, range).concat(frames.slice(len - range));\n\t }\n\t return frames;\n\t}\n\t\n\tfunction truncateFrames(payload, jsonBackup, range) {\n\t range = (typeof range === 'undefined') ? 30 : range;\n\t var body = payload.data.body;\n\t var frames;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t frames = chain[i].frames;\n\t frames = selectFrames(frames, range);\n\t chain[i].frames = frames;\n\t }\n\t } else if (body.trace) {\n\t frames = body.trace.frames;\n\t frames = selectFrames(frames, range);\n\t body.trace.frames = frames;\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction maybeTruncateValue(len, val) {\n\t if (!val) {\n\t return val;\n\t }\n\t if (val.length > len) {\n\t return val.slice(0, len - 3).concat('...');\n\t }\n\t return val;\n\t}\n\t\n\tfunction truncateStrings(len, payload, jsonBackup) {\n\t function truncator(k, v, seen) {\n\t switch (_.typeName(v)) {\n\t case 'string':\n\t return maybeTruncateValue(len, v);\n\t case 'object':\n\t case 'array':\n\t return _.traverse(v, truncator, seen);\n\t default:\n\t return v;\n\t }\n\t }\n\t payload = _.traverse(payload, truncator, []);\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction truncateTraceData(traceData) {\n\t if (traceData.exception) {\n\t delete traceData.exception.description;\n\t traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n\t }\n\t traceData.frames = selectFrames(traceData.frames, 1);\n\t return traceData;\n\t}\n\t\n\tfunction minBody(payload, jsonBackup) {\n\t var body = payload.data.body;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t chain[i] = truncateTraceData(chain[i]);\n\t }\n\t } else if (body.trace) {\n\t body.trace = truncateTraceData(body.trace);\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction needsTruncation(payload, maxSize) {\n\t return payload.length > maxSize;\n\t}\n\t\n\tfunction truncate(payload, jsonBackup, maxSize) {\n\t maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n\t var strategies = [\n\t raw,\n\t truncateFrames,\n\t truncateStrings.bind(null, 1024),\n\t truncateStrings.bind(null, 512),\n\t truncateStrings.bind(null, 256),\n\t minBody\n\t ];\n\t var strategy, results, result;\n\t\n\t while ((strategy = strategies.shift())) {\n\t results = strategy(payload, jsonBackup);\n\t payload = results[0];\n\t result = results[1];\n\t if (result.error || !needsTruncation(result.value, maxSize)) {\n\t return result;\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t truncate: truncate,\n\t\n\t /* for testing */\n\t raw: raw,\n\t truncateFrames: truncateFrames,\n\t truncateStrings: truncateStrings,\n\t maybeTruncateValue: maybeTruncateValue\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(15);\n\tvar detection = __webpack_require__(16);\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror) {\n\t oldOnError = window.onerror;\n\t while (oldOnError._rollbarOldOnError) {\n\t oldOnError = oldOnError._rollbarOldOnError;\n\t }\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t if (shim) {\n\t fn._rollbarOldOnError = oldOnError;\n\t }\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t // Ignore\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/*global XDomainRequest*/\n\t\n\tvar _ = __webpack_require__(5);\n\tvar truncation = __webpack_require__(13);\n\tvar logger = __webpack_require__(14);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n\t}\n\t\n\t// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n\t// so Angular change detection isn't triggered on each API call.\n\t// This is the equivalent of runOutsideAngular().\n\t//\n\tfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\t\n\t if (currentZone && currentZone._name === 'angular') {\n\t var rootZone = currentZone._parent;\n\t rootZone.run(function () {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t });\n\t } else {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t }\n\t}\n\t\n\t/* global RollbarProxy */\n\tfunction _proxyRequest(json, callback) {\n\t var rollbarProxy = new RollbarProxy();\n\t rollbarProxy.sendJsonPayload(\n\t json,\n\t function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n\t function(err) {\n\t callback(new Error(err));\n\t }\n\t );\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t if (typeof RollbarProxy !== 'undefined') {\n\t return _proxyRequest(data, callback);\n\t }\n\t\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post,\n\t postJsonPayload: postJsonPayload\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar errorParser = __webpack_require__(21);\n\tvar logger = __webpack_require__(14);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e) {\n\t logger.error('Error while parsing the error object.', e);\n\t try {\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t } catch (e2) {\n\t item.message = String(item.err) || String(e2);\n\t }\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.merge(item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t var remoteString = '$remote_ip';\n\t if (!options.captureIp) {\n\t remoteString = null;\n\t } else if (options.captureIp !== true) {\n\t remoteString += '_anonymize';\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: remoteString\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.merge(custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (options.sendFrameUrl) {\n\t frame.url = stackFrame.url;\n\t }\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.merge(custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(22);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext();\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t var name = exception.constructor && exception.constructor.name;\n\t if (!name || !name.length || name.length < 3) {\n\t name = exception.name;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(23)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.merge(item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.merge(extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.merge(item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data, item);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar urlparser = __webpack_require__(19);\n\tvar domUtil = __webpack_require__(28);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction nameFromDescription(description) {\n\t if (!description || !description.attributes) { return null; }\n\t var attrs = description.attributes;\n\t for (var a = 0; a < attrs.length; ++a) {\n\t if (attrs[a].key === 'name') {\n\t return attrs[a].value;\n\t }\n\t }\n\t return null;\n\t}\n\t\n\tfunction defaultValueScrubber(scrubFields) {\n\t var patterns = [];\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t patterns.push(new RegExp(scrubFields[i], 'i'));\n\t }\n\t return function(description) {\n\t var name = nameFromDescription(description);\n\t if (!name) { return false; }\n\t for (var i = 0; i < patterns.length; ++i) {\n\t if (patterns[i].test(name)) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t };\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.merge(this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState < 2) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t }\n\t if (xhr.readyState > 3) {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber) {\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t } else if (this.defaultValueScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ])});;\n\n\n// WEBPACK FOOTER //\n// rollbar.named-amd.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9b1be07f9f0d5802e969","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 14\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 15\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 18\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 20\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 22\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 27\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 28\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///rollbar.named-amd.min.js","webpack:///webpack/bootstrap c09fc587ccaa9d4d1c73","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/utility.js","webpack:///./src/merge.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/queue.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/truncation.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":["define","modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","rollbar","options","window","_rollbarConfig","alias","globalAlias","shimRunning","shimId","undefined","_rollbarStartTime","Date","getTime","Rollbar","_rollbarDidLoad","self","client","this","_","handleOptions","defaultOptions","api","API","transport","urllib","Client","logger","gWindow","gDocument","document","addTransformsToNotifier","notifier","addPredicatesToQueue","queue","captureUncaught","handleUncaughtExceptions","globals","captureUncaughtExceptions","wrapGlobals","captureUnhandledRejections","handleUnhandledRejections","instrumenter","Instrumenter","telemeter","instrument","handleUninitialized","maybeCallback","message","error","Error","addTransform","transforms","handleItemWithError","ensureItemHasSomethingToSay","addBaseInfo","addRequestInfo","addClientInfo","addPluginInfo","addBody","sharedTransforms","addMessageWithError","addTelemetryData","addConfigToPayload","scrubPayload","userTransform","itemToPayload","addPredicate","sharedPredicates","checkLevel","predicates","checkIgnore","userCheckIgnore","urlIsNotBlacklisted","urlIsWhitelisted","messageIsIgnored","_getFirstFunction","args","i","len","length","isFunction","errorParser","_instance","init","global","configure","prototype","payloadData","oldOptions","payload","lastError","log","item","_createItem","arguments","uuid","apply","debug","info","warn","warning","critical","buildJsonPayload","sendJsonPayload","jsonPayload","handleUncaughtException","url","lineno","colno","context","stackInfo","makeUnhandledStackInfo","isError","_unhandledStackInfo","level","uncaughtErrorLevel","_isUncaught","handleUnhandledRejection","reason","promise","reasonResult","stringify","value","_rollbarContext","_originalArgs","push","wrap","f","_before","ctxFn","_isWrap","_rollbar_wrapped","exc","e","_rollbarWrappedError","isType","String","_wrappedSource","toString","hasOwnProperty","prop","captureEvent","event","createTelemetryEvent","type","metadata","captureDomContentLoaded","ts","captureLoad","createItem","version","scrubFields","logLevel","reportLevel","endpoint","verbose","enabled","sendConfig","includeItemsInTelemetry","captureIp","platform","merge","rateLimiter","configureGlobal","setPlatformOptions","Queue","Notifier","Telemeter","lastErrorHash","generateItemHash","stack","err","RateLimiter","maxItems","itemsPerMinute","_defaultLogLevel","_log","wait","callback","postJsonPayload","defaultLevel","_sameAsLastError","_captureRollbarItem","telemetryEvents","copyEvents","itemHash","startTime","now","counter","perMinCounter","platformOptions","checkRate","limit","ignoreRateLimit","shouldSendValue","shouldSend","globalRateLimit","limitPerMin","perMinute","rateLimitPayload","msg","environment","body","extra","language","framework","name","globalSettings","elapsedTime","globalRateLimitPerMin","setupJSON","__initRollbarJSON","isDefined","JSON","isNativeFunction","RollbarJSON","parse","setupCustomJSON","x","t","typeName","match","toLowerCase","reRegExpChar","funcMatchString","Function","Object","replace","reIsNative","RegExp","isObject","test","u","isIterable","traverse","obj","func","seen","k","v","isObj","isArray","keys","indexOf","result","same","redact","uuid4","d","r","Math","random","floor","sanitizeUrl","baseUrlParts","parseUri","anchor","source","query","str","o","parseUriOptions","parser","strictMode","exec","uri","l","key","q","$0","$1","$2","addParamsAndAccessTokenToPath","accessToken","params","access_token","paramsArray","join","sort","path","qs","h","substring","formatUrl","protocol","port","hostname","backup","jsonError","backupError","jsonParse","s","mode","backupMessage","location","line","column","guessFunctionName","gatherContext","href","useragent","navigator","userAgent","wrapCallback","resp","requestKeys","lambdaContext","custom","request","arg","extraArgs","typ","DOMException","j","timestamp","arrayIncludes","arr","val","TELEMETRY_TYPES","TELEMETRY_LEVELS","get","split","set","temp","replacement","scrub","data","redactQueryParam","dummy0","paramPart","paramScrubber","queryRes","valScrubber","paramRes","scrubber","tmpV","_getScrubFieldRegexs","_getScrubQueryParamRegexs","pat","ret","formatArgsAsString","substr","filterIp","requestData","newIp","parts","pop","beginning","slice","slashIdx","terminal","concat","current","input","overwriteScrubFields","LEVELS","strict","loose","src","copy","clone","isPlainObject","hasOwn","toStr","hasOwnConstructor","hasIsPrototypeOf","constructor","n","this_value","valueOf","quote","string","rx_escapable","lastIndex","a","meta","charCodeAt","holder","partial","mind","gap","toJSON","rep","isFinite","indent","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Boolean","Number","\b","\t","\n","\f","\r","\"","\\","replacer","space","","debackslashify","text","ignore","b","fromCharCode","parseInt","escapes","state","container","/","go","firstokey","okey","ovalue","firstavalue","avalue","number","action","{","}","ocomma","[","]","acomma",":","colon","SyntaxError",",","true","false","null","reviver","tx","walk","pendingItems","pendingRequests","retryQueue","retryHandle","waitCallback","waitIntervalID","predicate","addPendingItem","removePendingItem","idx","splice","addItem","originalError","originalItem","predicateResult","_applyPredicates","stop","_maybeLog","_makeApiRequest","_dequeuePendingRequest","bind","_maybeCallWait","clearInterval","setInterval","rateLimitResponse","postItem","_maybeRetry","RETRIABLE_ERRORS","shouldRetry","retryInterval","code","_retryApiRequest","retryObject","shift","transform","_applyTransforms","transformIndex","transformsLength","cb","maxTelemetryEvents","MAX_EVENTS","maxQueueSize","max","min","getLevel","manual","newMaxEvents","deleteCount","events","Array","filterTelemetry","capture","rollbarUUID","timestamp_ms","captureError","captureLog","captureNetwork","subtype","levelFromStatus","status_code","statusCode","captureDom","element","checked","captureNavigation","from","to","captureConnectivityChange","change","Api","jsonBackup","transportOptions","_getTransport","helpers","getTransportFromOptions","truncation","search","buildPayload","post","stringifyResult","truncate","contextResult","defaults","proxy","opts","pathname","method","host","appendPathToPath","base","baseTrailingSlash","pathBeginningSlash","raw","selectFrames","frames","range","truncateFrames","trace_chain","chain","trace","maybeTruncateValue","truncateStrings","truncator","truncateTraceData","traceData","exception","description","minBody","needsTruncation","maxSize","strategy","results","strategies","unshift","detection","ieVersion","console","con","dummy","properties","methods","getIEVersion","undef","div","createElement","all","getElementsByTagName","innerHTML","Detection","handler","shim","oldOnError","_rollbarOldOnError","onerror","fn","_rollbarWindowOnError","old","_rollbarURH","belongsToShim","removeEventListener","rejectionHandler","evt","detail","addEventListener","_extendListenerPrototype","oldAddEventListener","_rollbarOldAdd","addFn","bubble","oldRemoveEventListener","_rollbarOldRemove","removeFn","requestFactory","_makeZoneRequest","writeData","currentZone","Zone","_name","rootZone","_parent","run","_makeRequest","_proxyRequest","json","rollbarProxy","RollbarProxy","_msg","_createXMLHTTPObject","onreadystatechange","readyState","parseResponse","responseText","_isSuccess","_isNormalFailure","status","_newRetriableError","ex","open","setRequestHeader","send","e1","XDomainRequest","xdomainrequest","onprogress","ontimeout","onload","e2","xmlhttp","factories","XMLHttpRequest","ActiveXObject","numFactories","last","auth","hash","pathParts","_savedStackTrace","server","remoteString","query_string","user_ip","nav","scr","screen","runtime_ms","round","javascript","browser","cookie_enabled","cookieEnabled","width","height","cur","plugins","navPlugins","addBodyTrace","addBodyMessage","messageResult","guess","guessErrorClass","className","class","rawStack","rawException","stackFrame","frame","pre","contextLength","mid","filename","sendFrameUrl","endsWith","reverse","UNKNOWN_FUNCTION","Frame","_stackFrame","fileName","lineNumber","functionName","columnNumber","Stack","getStack","parserStack","ErrorStackParser","errMsg","errClassMatch","ERR_CLASS_REGEXP","errClass","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","root","factory","StackFrame","_map","array","thisArg","map","output","_filter","filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","isNaN","parseFloat","filtered","tokens","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","_isNumber","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","getArgs","TypeError","getFileName","getLineNumber","getColumnNumber","getSource","payloadOptions","tracePath","newExtra","newItem","configKey","settings","levelVal","reportLevelVal","isUncaught","onSendCallback","urlIsOnAList","whiteOrBlack","black","list","frameLength","listLength","urlRegex","hostBlackList","hostWhiteList","listName","exceptionMessage","ignoredMessages","rIgnoredMessage","traceMessage","bodyMessage","replacements","orig","restore","nameFromDescription","attributes","attrs","defaultValueScrubber","patterns","_window","_document","autoInstrument","scrubTelemetryInputs","telemetryScrubber","network","navigation","connectivity","eventRemovers","dom","_location","_lastHref","urlparser","domUtil","networkResponseHeaders","networkResponseBody","networkRequestBody","oldSettings","deinstrumentNetwork","instrumentNetwork","deinstrumentConsole","instrumentConsole","deinstrumentDom","instrumentDom","deinstrumentNavigation","instrumentNavigation","deinstrumentConnectivity","instrumentConnectivity","wrapProp","xhr","xhrp","__rollbar_xhr","start_time_ms","end_time_ms","onreadystatechangeHandler","__rollbar_event","headers","headersConfig","header","allHeaders","getAllResponseHeaders","trim","getResponseHeader","response","then","wrapConsole","origConsole","removeListeners","clickHandler","handleClick","blurHandler","handleBlur","addListener","getElementFromEvent","hasTag","tagName","anchorOrButton","isDescribedElement","captureDomEvent","handleSelectInputChanged","elem","multiple","selected","selectedIndex","isChecked","getElementType","describeElement","elementString","elementArrayToString","treeToArray","chrome","chromePackagedApp","app","runtime","hasPushState","history","pushState","handleUrlChange","parsedHref","parsedTo","parsedFrom","section","altType","attachEvent","detachEvent","getAttribute","subtypes","doc","target","elementFromPoint","clientX","clientY","nextDescription","MAX_HEIGHT","out","parentNode","nextStr","totalLength","MAX_LENGTH","separator","separatorLength","descriptionToString","desc","classes","attr"],"mappings":"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","file":"rollbar.named-amd.min.js","sourcesContent":["define(\"rollbar\", [], function() { return /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar rollbar = __webpack_require__(2);\n\t\n\tvar options = (typeof window !== 'undefined') && window._rollbarConfig;\n\tvar alias = options && options.globalAlias || 'Rollbar';\n\tvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\t\n\tif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n\t window._rollbarStartTime = (new Date()).getTime();\n\t}\n\t\n\tif (!shimRunning && options) {\n\t var Rollbar = new rollbar(options);\n\t window[alias] = Rollbar;\n\t} else if (typeof window !== 'undefined') {\n\t window.rollbar = rollbar;\n\t window._rollbarDidLoad = true;\n\t} else if (typeof self !== 'undefined') {\n\t self.rollbar = rollbar;\n\t self._rollbarDidLoad = true;\n\t}\n\t\n\tmodule.exports = rollbar;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Client = __webpack_require__(3);\n\tvar _ = __webpack_require__(5);\n\tvar API = __webpack_require__(11);\n\tvar logger = __webpack_require__(14);\n\tvar globals = __webpack_require__(17);\n\t\n\tvar transport = __webpack_require__(18);\n\tvar urllib = __webpack_require__(19);\n\t\n\tvar transforms = __webpack_require__(20);\n\tvar sharedTransforms = __webpack_require__(24);\n\tvar predicates = __webpack_require__(25);\n\tvar sharedPredicates = __webpack_require__(26);\n\tvar errorParser = __webpack_require__(21);\n\tvar Instrumenter = __webpack_require__(27);\n\t\n\tfunction Rollbar(options, client) {\n\t this.options = _.handleOptions(defaultOptions, options);\n\t var api = new API(this.options, transport, urllib);\n\t this.client = client || new Client(this.options, api, logger, 'browser');\n\t\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var gDocument = (typeof document != 'undefined') && document;\n\t addTransformsToNotifier(this.client.notifier, gWindow);\n\t addPredicatesToQueue(this.client.queue);\n\t if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n\t globals.captureUncaughtExceptions(gWindow, this);\n\t globals.wrapGlobals(gWindow, this);\n\t }\n\t if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n\t globals.captureUnhandledRejections(gWindow, this);\n\t }\n\t\n\t this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n\t this.instrumenter.instrument();\n\t}\n\t\n\tvar _instance = null;\n\tRollbar.init = function(options, client) {\n\t if (_instance) {\n\t return _instance.global(options).configure(options);\n\t }\n\t _instance = new Rollbar(options, client);\n\t return _instance;\n\t};\n\t\n\tfunction handleUninitialized(maybeCallback) {\n\t var message = 'Rollbar is not initialized';\n\t logger.error(message);\n\t if (maybeCallback) {\n\t maybeCallback(new Error(message));\n\t }\n\t}\n\t\n\tRollbar.prototype.global = function(options) {\n\t this.client.global(options);\n\t return this;\n\t};\n\tRollbar.global = function(options) {\n\t if (_instance) {\n\t return _instance.global(options);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.handleOptions(oldOptions, options, payload);\n\t this.client.configure(this.options, payloadData);\n\t this.instrumenter.configure(this.options);\n\t return this;\n\t};\n\tRollbar.configure = function(options, payloadData) {\n\t if (_instance) {\n\t return _instance.configure(options, payloadData);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.lastError = function() {\n\t return this.client.lastError;\n\t};\n\tRollbar.lastError = function() {\n\t if (_instance) {\n\t return _instance.lastError();\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.log = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.log(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.log = function() {\n\t if (_instance) {\n\t return _instance.log.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.debug = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.debug(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.debug = function() {\n\t if (_instance) {\n\t return _instance.debug.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.info = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.info(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.info = function() {\n\t if (_instance) {\n\t return _instance.info.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warn = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warn(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warn = function() {\n\t if (_instance) {\n\t return _instance.warn.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warning = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warning(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warning = function() {\n\t if (_instance) {\n\t return _instance.warning.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.error = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.error(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.error = function() {\n\t if (_instance) {\n\t return _instance.error.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.critical = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.critical(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.critical = function() {\n\t if (_instance) {\n\t return _instance.critical.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.buildJsonPayload = function(item) {\n\t return this.client.buildJsonPayload(item);\n\t};\n\tRollbar.buildJsonPayload = function() {\n\t if (_instance) {\n\t return _instance.buildJsonPayload.apply(_instance, arguments);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n\t return this.client.sendJsonPayload(jsonPayload);\n\t};\n\tRollbar.sendJsonPayload = function() {\n\t if (_instance) {\n\t return _instance.sendJsonPayload.apply(_instance, arguments);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n\t var item;\n\t var stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t 'onerror',\n\t 'uncaught exception',\n\t errorParser\n\t );\n\t if (_.isError(error)) {\n\t item = this._createItem([message, error, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else if (_.isError(url)) {\n\t item = this._createItem([message, url, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else {\n\t item = this._createItem([message, context]);\n\t item.stackInfo = stackInfo;\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n\t var message = 'unhandled rejection was null or undefined!';\n\t if (reason) {\n\t if (reason.message) {\n\t message = reason.message;\n\t } else {\n\t var reasonResult = _.stringify(reason);\n\t if (reasonResult.value) {\n\t message = reasonResult.value;\n\t }\n\t }\n\t }\n\t var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\t\n\t var item;\n\t if (_.isError(reason)) {\n\t item = this._createItem([message, reason, context]);\n\t } else {\n\t item = this._createItem([message, reason, context]);\n\t item.stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t '',\n\t 0,\n\t 0,\n\t null,\n\t 'unhandledrejection',\n\t '',\n\t errorParser\n\t );\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t item._originalArgs = item._originalArgs || [];\n\t item._originalArgs.push(promise);\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.wrap = function(f, context, _before) {\n\t try {\n\t var ctxFn;\n\t if(_.isFunction(context)) {\n\t ctxFn = context;\n\t } else {\n\t ctxFn = function() { return context || {}; };\n\t }\n\t\n\t if (!_.isFunction(f)) {\n\t return f;\n\t }\n\t\n\t if (f._isWrap) {\n\t return f;\n\t }\n\t\n\t if (!f._rollbar_wrapped) {\n\t f._rollbar_wrapped = function () {\n\t if (_before && _.isFunction(_before)) {\n\t _before.apply(this, arguments);\n\t }\n\t try {\n\t return f.apply(this, arguments);\n\t } catch(exc) {\n\t var e = exc;\n\t if (e && window._rollbarWrappedError !== e) {\n\t if (_.isType(e, 'string')) {\n\t e = new String(e);\n\t }\n\t e._rollbarContext = ctxFn() || {};\n\t e._rollbarContext._wrappedSource = f.toString();\n\t\n\t window._rollbarWrappedError = e;\n\t }\n\t throw e;\n\t }\n\t };\n\t\n\t f._rollbar_wrapped._isWrap = true;\n\t\n\t if (f.hasOwnProperty) {\n\t for (var prop in f) {\n\t if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n\t f._rollbar_wrapped[prop] = f[prop];\n\t }\n\t }\n\t }\n\t }\n\t\n\t return f._rollbar_wrapped;\n\t } catch (e) {\n\t // Return the original function if the wrap fails.\n\t return f;\n\t }\n\t};\n\tRollbar.wrap = function(f, context) {\n\t if (_instance) {\n\t return _instance.wrap(f, context);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.captureEvent = function() {\n\t var event = _.createTelemetryEvent(arguments);\n\t return this.client.captureEvent(event.type, event.metadata, event.level);\n\t};\n\tRollbar.captureEvent = function() {\n\t if (_instance) {\n\t return _instance.captureEvent.apply(_instance, arguments);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\t// The following two methods are used internally and are not meant for public use\n\tRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureLoad(ts);\n\t};\n\t\n\t/* Internal */\n\t\n\tfunction addTransformsToNotifier(notifier, gWindow) {\n\t notifier\n\t .addTransform(transforms.handleItemWithError)\n\t .addTransform(transforms.ensureItemHasSomethingToSay)\n\t .addTransform(transforms.addBaseInfo)\n\t .addTransform(transforms.addRequestInfo(gWindow))\n\t .addTransform(transforms.addClientInfo(gWindow))\n\t .addTransform(transforms.addPluginInfo(gWindow))\n\t .addTransform(transforms.addBody)\n\t .addTransform(sharedTransforms.addMessageWithError)\n\t .addTransform(sharedTransforms.addTelemetryData)\n\t .addTransform(sharedTransforms.addConfigToPayload)\n\t .addTransform(transforms.scrubPayload)\n\t .addTransform(sharedTransforms.userTransform(logger))\n\t .addTransform(sharedTransforms.itemToPayload);\n\t}\n\t\n\tfunction addPredicatesToQueue(queue) {\n\t queue\n\t .addPredicate(sharedPredicates.checkLevel)\n\t .addPredicate(predicates.checkIgnore)\n\t .addPredicate(sharedPredicates.userCheckIgnore(logger))\n\t .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n\t .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n\t .addPredicate(sharedPredicates.messageIsIgnored(logger));\n\t}\n\t\n\tRollbar.prototype._createItem = function(args) {\n\t return _.createItem(args, logger, this);\n\t};\n\t\n\tfunction _getFirstFunction(args) {\n\t for (var i = 0, len = args.length; i < len; ++i) {\n\t if (_.isFunction(args[i])) {\n\t return args[i];\n\t }\n\t }\n\t return undefined;\n\t}\n\t\n\t/* global __NOTIFIER_VERSION__:false */\n\t/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n\t/* global __DEFAULT_LOG_LEVEL__:false */\n\t/* global __DEFAULT_REPORT_LEVEL__:false */\n\t/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n\t/* global __DEFAULT_ENDPOINT__:false */\n\t\n\tvar defaultOptions = {\n\t version: (\"2.6.1\"),\n\t scrubFields: ([\"pw\",\"pass\",\"passwd\",\"password\",\"secret\",\"confirm_password\",\"confirmPassword\",\"password_confirmation\",\"passwordConfirmation\",\"access_token\",\"accessToken\",\"secret_key\",\"secretKey\",\"secretToken\",\"cc-number\",\"card number\",\"cardnumber\",\"cardnum\",\"ccnum\",\"ccnumber\",\"cc num\",\"creditcardnumber\",\"credit card number\",\"newcreditcardnumber\",\"new credit card\",\"creditcardno\",\"credit card no\",\"card#\",\"card #\",\"cc-csc\",\"cvc2\",\"cvv2\",\"ccv2\",\"security code\",\"card verification\",\"name on credit card\",\"name on card\",\"nameoncard\",\"cardholder\",\"card holder\",\"name des karteninhabers\",\"card type\",\"cardtype\",\"cc type\",\"cctype\",\"payment type\",\"expiration date\",\"expirationdate\",\"expdate\",\"cc-exp\"]),\n\t logLevel: (\"debug\"),\n\t reportLevel: (\"debug\"),\n\t uncaughtErrorLevel: (\"error\"),\n\t endpoint: (\"api.rollbar.com/api/1/item/\"),\n\t verbose: false,\n\t enabled: true,\n\t sendConfig: false,\n\t includeItemsInTelemetry: true,\n\t captureIp: true\n\t};\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar RateLimiter = __webpack_require__(4);\n\tvar Queue = __webpack_require__(8);\n\tvar Notifier = __webpack_require__(9);\n\tvar Telemeter = __webpack_require__(10);\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Rollbar - the interface to Rollbar\n\t *\n\t * @param options\n\t * @param api\n\t * @param logger\n\t */\n\tfunction Rollbar(options, api, logger, platform) {\n\t this.options = _.merge(options);\n\t this.logger = logger;\n\t Rollbar.rateLimiter.configureGlobal(this.options);\n\t Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n\t this.api = api;\n\t this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n\t this.notifier = new Notifier(this.queue, this.options);\n\t this.telemeter = new Telemeter(this.options);\n\t this.lastError = null;\n\t this.lastErrorHash = 'none';\n\t}\n\t\n\tvar defaultOptions = {\n\t maxItems: 0,\n\t itemsPerMinute: 60\n\t};\n\t\n\tRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\t\n\tRollbar.prototype.global = function(options) {\n\t Rollbar.rateLimiter.configureGlobal(options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.merge(oldOptions, options, payload);\n\t this.notifier && this.notifier.configure(this.options);\n\t this.telemeter && this.telemeter.configure(this.options);\n\t this.global(this.options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.log = function(item) {\n\t var level = this._defaultLogLevel();\n\t return this._log(level, item);\n\t};\n\t\n\tRollbar.prototype.debug = function(item) {\n\t this._log('debug', item);\n\t};\n\t\n\tRollbar.prototype.info = function(item) {\n\t this._log('info', item);\n\t};\n\t\n\tRollbar.prototype.warn = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.warning = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.error = function(item) {\n\t this._log('error', item);\n\t};\n\t\n\tRollbar.prototype.critical = function(item) {\n\t this._log('critical', item);\n\t};\n\t\n\tRollbar.prototype.wait = function(callback) {\n\t this.queue.wait(callback);\n\t};\n\t\n\tRollbar.prototype.captureEvent = function(type, metadata, level) {\n\t return this.telemeter.captureEvent(type, metadata, level);\n\t};\n\t\n\tRollbar.prototype.captureDomContentLoaded = function(ts) {\n\t return this.telemeter.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(ts) {\n\t return this.telemeter.captureLoad(ts);\n\t};\n\t\n\tRollbar.prototype.buildJsonPayload = function(item) {\n\t return this.api.buildJsonPayload(item);\n\t};\n\t\n\tRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n\t this.api.postJsonPayload(jsonPayload);\n\t};\n\t\n\t/* Internal */\n\t\n\tRollbar.prototype._log = function(defaultLevel, item) {\n\t var callback;\n\t if (item.callback) {\n\t callback = item.callback;\n\t delete item.callback;\n\t }\n\t if (this._sameAsLastError(item)) {\n\t if (callback) {\n\t var error = new Error('ignored identical item');\n\t error.item = item;\n\t callback(error);\n\t }\n\t return;\n\t }\n\t try {\n\t item.level = item.level || defaultLevel;\n\t this.telemeter._captureRollbarItem(item);\n\t item.telemetryEvents = this.telemeter.copyEvents();\n\t this.notifier.log(item, callback);\n\t } catch (e) {\n\t this.logger.error(e);\n\t }\n\t};\n\t\n\tRollbar.prototype._defaultLogLevel = function() {\n\t return this.options.logLevel || 'debug';\n\t};\n\t\n\tRollbar.prototype._sameAsLastError = function(item) {\n\t if (!item._isUncaught) {\n\t return false;\n\t }\n\t var itemHash = generateItemHash(item);\n\t if (this.lastErrorHash === itemHash) {\n\t return true;\n\t }\n\t this.lastError = item.err;\n\t this.lastErrorHash = itemHash;\n\t return false;\n\t};\n\t\n\tfunction generateItemHash(item) {\n\t var message = item.message || '';\n\t var stack = (item.err || {}).stack || String(item.err);\n\t return message + '::' + stack;\n\t}\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n\t *\n\t * @param options - the same options that are accepted by configureGlobal offered as a convenience\n\t */\n\tfunction RateLimiter(options) {\n\t this.startTime = _.now();\n\t this.counter = 0;\n\t this.perMinCounter = 0;\n\t this.platform = null;\n\t this.platformOptions = {};\n\t this.configureGlobal(options);\n\t}\n\t\n\tRateLimiter.globalSettings = {\n\t startTime: _.now(),\n\t maxItems: undefined,\n\t itemsPerMinute: undefined\n\t};\n\t\n\t/*\n\t * configureGlobal - set the global rate limiter options\n\t *\n\t * @param options - Only the following values are recognized:\n\t * startTime: a timestamp of the form returned by (new Date()).getTime()\n\t * maxItems: the maximum items\n\t * itemsPerMinute: the max number of items to send in a given minute\n\t */\n\tRateLimiter.prototype.configureGlobal = function(options) {\n\t if (options.startTime !== undefined) {\n\t RateLimiter.globalSettings.startTime = options.startTime;\n\t }\n\t if (options.maxItems !== undefined) {\n\t RateLimiter.globalSettings.maxItems = options.maxItems;\n\t }\n\t if (options.itemsPerMinute !== undefined) {\n\t RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n\t }\n\t};\n\t\n\t/*\n\t * shouldSend - determine if we should send a given item based on rate limit settings\n\t *\n\t * @param item - the item we are about to send\n\t * @returns An object with the following structure:\n\t * error: (Error|null)\n\t * shouldSend: bool\n\t * payload: (Object|null)\n\t * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n\t * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n\t * describe the situation, but it means that we were already over a rate limit (either globally or\n\t * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n\t * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n\t * place of the passed in item.\n\t */\n\tRateLimiter.prototype.shouldSend = function(item, now) {\n\t now = now || _.now();\n\t var elapsedTime = now - this.startTime;\n\t if (elapsedTime < 0 || elapsedTime >= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar merge = __webpack_require__(6);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(7);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t // Detect both Error and Firefox Exception type\n\t return isType(e, 'error') || isType(e, 'exception');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t var same = true;\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t same = same && result[k] === obj[k];\n\t }\n\t\n\t return (keys.length != 0 && !same) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t if (!baseUrlParts) {\n\t return '(unknown)';\n\t }\n\t\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t return undefined;\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t\n\t for (var i = 0, l = o.key.length; i < l; ++i) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t case 'exception': // Firefox Exception type\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = merge(custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\tvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\n\tvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\t\n\tfunction arrayIncludes(arr, val) {\n\t for (var k = 0; k < arr.length; ++k) {\n\t if (arr[k] === val) {\n\t return true;\n\t }\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction createTelemetryEvent(args) {\n\t var type, metadata, level;\n\t var arg;\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'string':\n\t if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n\t type = arg;\n\t } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n\t level = arg;\n\t }\n\t break;\n\t case 'object':\n\t metadata = arg;\n\t break;\n\t default:\n\t break;\n\t }\n\t }\n\t var event = {\n\t type: type || 'manual',\n\t metadata: metadata || {},\n\t level: level\n\t };\n\t\n\t return event;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len - 1; ++i) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart) {\n\t return paramPart + redact();\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact();\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; ++i) {\n\t arg = args[i];\n\t switch (typeName(arg)) {\n\t case 'object':\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500) {\n\t arg = arg.substr(0, 497) + '...';\n\t }\n\t break;\n\t case 'null':\n\t arg = 'null';\n\t break;\n\t case 'undefined':\n\t arg = 'undefined';\n\t break;\n\t case 'symbol':\n\t arg = arg.toString();\n\t break;\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tfunction filterIp(requestData, captureIp) {\n\t if (!requestData || !requestData['user_ip'] || captureIp === true) {\n\t return;\n\t }\n\t var newIp = requestData['user_ip'];\n\t if (!captureIp) {\n\t newIp = null;\n\t } else {\n\t try {\n\t var parts;\n\t if (newIp.indexOf('.') !== -1) {\n\t parts = newIp.split('.');\n\t parts.pop();\n\t parts.push('0');\n\t newIp = parts.join('.');\n\t } else if (newIp.indexOf(':') !== -1) {\n\t parts = newIp.split(':');\n\t if (parts.length > 2) {\n\t var beginning = parts.slice(0, 3);\n\t var slashIdx = beginning[2].indexOf('/');\n\t if (slashIdx !== -1) {\n\t beginning[2] = beginning[2].substring(0, slashIdx);\n\t }\n\t var terminal = '0000:0000:0000:0000:0000';\n\t newIp = beginning.concat(terminal).join(':');\n\t }\n\t } else {\n\t newIp = null;\n\t }\n\t } catch (e) {\n\t newIp = null;\n\t }\n\t }\n\t requestData['user_ip'] = newIp;\n\t}\n\t\n\tfunction handleOptions(current, input, payload) {\n\t var result = merge(current, input, payload);\n\t if (!input || input.overwriteScrubFields) {\n\t return result;\n\t }\n\t if (input.scrubFields) {\n\t result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t createItem: createItem,\n\t createTelemetryEvent: createTelemetryEvent,\n\t filterIp: filterIp,\n\t formatArgsAsString: formatArgsAsString,\n\t formatUrl: formatUrl,\n\t get: get,\n\t handleOptions: handleOptions,\n\t isError: isError,\n\t isFunction: isFunction,\n\t isIterable: isIterable,\n\t isNativeFunction: isNativeFunction,\n\t isType: isType,\n\t jsonParse: jsonParse,\n\t LEVELS: LEVELS,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t merge: merge,\n\t now: now,\n\t redact: redact,\n\t sanitizeUrl: sanitizeUrl,\n\t scrub: scrub,\n\t set: set,\n\t stringify: stringify,\n\t traverse: traverse,\n\t typeName: typeName,\n\t uuid4: uuid4\n\t};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tfunction merge() {\n\t var i, src, copy, clone, name,\n\t result = {},\n\t current = null,\n\t length = arguments.length;\n\t\n\t for (i=0; i < length; i++) {\n\t current = arguments[i];\n\t if (current == null) {\n\t continue;\n\t }\n\t\n\t for (name in current) {\n\t src = result[name];\n\t copy = current[name];\n\t if (result !== copy) {\n\t if (copy && isPlainObject(copy)) {\n\t clone = src && isPlainObject(src) ? src : {};\n\t result[name] = merge(clone, copy);\n\t } else if (typeof copy !== 'undefined') {\n\t result[name] = copy;\n\t }\n\t }\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = merge;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.merge(options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t var events = Array.prototype.slice.call(this.queue, 0);\n\t if (_.isFunction(this.options.filterTelemetry)) {\n\t try {\n\t var i = events.length;\n\t while (i--) {\n\t if (this.options.filterTelemetry(events[i])) {\n\t events.splice(i, 1);\n\t }\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t }\n\t return events;\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (exc) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n\t return this.capture(type, metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar helpers = __webpack_require__(12);\n\tvar truncation = __webpack_require__(13);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.buildJsonPayload = function(data, callback) {\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t if (callback) {\n\t callback(stringifyResult.error);\n\t }\n\t return null;\n\t }\n\t\n\t return stringifyResult.value;\n\t};\n\t\n\t/**\n\t *\n\t * @param jsonPayload\n\t * @param callback\n\t */\n\tApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.merge(oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction raw(payload, jsonBackup) {\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction selectFrames(frames, range) {\n\t var len = frames.length;\n\t if (len > range * 2) {\n\t return frames.slice(0, range).concat(frames.slice(len - range));\n\t }\n\t return frames;\n\t}\n\t\n\tfunction truncateFrames(payload, jsonBackup, range) {\n\t range = (typeof range === 'undefined') ? 30 : range;\n\t var body = payload.data.body;\n\t var frames;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t frames = chain[i].frames;\n\t frames = selectFrames(frames, range);\n\t chain[i].frames = frames;\n\t }\n\t } else if (body.trace) {\n\t frames = body.trace.frames;\n\t frames = selectFrames(frames, range);\n\t body.trace.frames = frames;\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction maybeTruncateValue(len, val) {\n\t if (!val) {\n\t return val;\n\t }\n\t if (val.length > len) {\n\t return val.slice(0, len - 3).concat('...');\n\t }\n\t return val;\n\t}\n\t\n\tfunction truncateStrings(len, payload, jsonBackup) {\n\t function truncator(k, v, seen) {\n\t switch (_.typeName(v)) {\n\t case 'string':\n\t return maybeTruncateValue(len, v);\n\t case 'object':\n\t case 'array':\n\t return _.traverse(v, truncator, seen);\n\t default:\n\t return v;\n\t }\n\t }\n\t payload = _.traverse(payload, truncator, []);\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction truncateTraceData(traceData) {\n\t if (traceData.exception) {\n\t delete traceData.exception.description;\n\t traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n\t }\n\t traceData.frames = selectFrames(traceData.frames, 1);\n\t return traceData;\n\t}\n\t\n\tfunction minBody(payload, jsonBackup) {\n\t var body = payload.data.body;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t chain[i] = truncateTraceData(chain[i]);\n\t }\n\t } else if (body.trace) {\n\t body.trace = truncateTraceData(body.trace);\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction needsTruncation(payload, maxSize) {\n\t return payload.length > maxSize;\n\t}\n\t\n\tfunction truncate(payload, jsonBackup, maxSize) {\n\t maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n\t var strategies = [\n\t raw,\n\t truncateFrames,\n\t truncateStrings.bind(null, 1024),\n\t truncateStrings.bind(null, 512),\n\t truncateStrings.bind(null, 256),\n\t minBody\n\t ];\n\t var strategy, results, result;\n\t\n\t while ((strategy = strategies.shift())) {\n\t results = strategy(payload, jsonBackup);\n\t payload = results[0];\n\t result = results[1];\n\t if (result.error || !needsTruncation(result.value, maxSize)) {\n\t return result;\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t truncate: truncate,\n\t\n\t /* for testing */\n\t raw: raw,\n\t truncateFrames: truncateFrames,\n\t truncateStrings: truncateStrings,\n\t maybeTruncateValue: maybeTruncateValue\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(15);\n\tvar detection = __webpack_require__(16);\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror) {\n\t oldOnError = window.onerror;\n\t while (oldOnError._rollbarOldOnError) {\n\t oldOnError = oldOnError._rollbarOldOnError;\n\t }\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t if (shim) {\n\t fn._rollbarOldOnError = oldOnError;\n\t }\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t // Ignore\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/*global XDomainRequest*/\n\t\n\tvar _ = __webpack_require__(5);\n\tvar truncation = __webpack_require__(13);\n\tvar logger = __webpack_require__(14);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n\t}\n\t\n\t// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n\t// so Angular change detection isn't triggered on each API call.\n\t// This is the equivalent of runOutsideAngular().\n\t//\n\tfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\t\n\t if (currentZone && currentZone._name === 'angular') {\n\t var rootZone = currentZone._parent;\n\t rootZone.run(function () {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t });\n\t } else {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t }\n\t}\n\t\n\t/* global RollbarProxy */\n\tfunction _proxyRequest(json, callback) {\n\t var rollbarProxy = new RollbarProxy();\n\t rollbarProxy.sendJsonPayload(\n\t json,\n\t function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n\t function(err) {\n\t callback(new Error(err));\n\t }\n\t );\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t if (typeof RollbarProxy !== 'undefined') {\n\t return _proxyRequest(data, callback);\n\t }\n\t\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post,\n\t postJsonPayload: postJsonPayload\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar errorParser = __webpack_require__(21);\n\tvar logger = __webpack_require__(14);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e) {\n\t logger.error('Error while parsing the error object.', e);\n\t try {\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t } catch (e2) {\n\t item.message = String(item.err) || String(e2);\n\t }\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.merge(item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t var remoteString = '$remote_ip';\n\t if (!options.captureIp) {\n\t remoteString = null;\n\t } else if (options.captureIp !== true) {\n\t remoteString += '_anonymize';\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: remoteString\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.merge(custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (options.sendFrameUrl) {\n\t frame.url = stackFrame.url;\n\t }\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.merge(custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(22);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext();\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t var name = exception.constructor && exception.constructor.name;\n\t if (!name || !name.length || name.length < 3) {\n\t name = exception.name;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(23)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.merge(item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.merge(extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.merge(item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data, item);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar urlparser = __webpack_require__(19);\n\tvar domUtil = __webpack_require__(28);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction nameFromDescription(description) {\n\t if (!description || !description.attributes) { return null; }\n\t var attrs = description.attributes;\n\t for (var a = 0; a < attrs.length; ++a) {\n\t if (attrs[a].key === 'name') {\n\t return attrs[a].value;\n\t }\n\t }\n\t return null;\n\t}\n\t\n\tfunction defaultValueScrubber(scrubFields) {\n\t var patterns = [];\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t patterns.push(new RegExp(scrubFields[i], 'i'));\n\t }\n\t return function(description) {\n\t var name = nameFromDescription(description);\n\t if (!name) { return false; }\n\t for (var i = 0; i < patterns.length; ++i) {\n\t if (patterns[i].test(name)) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t };\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.merge(this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState < 2) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t }\n\t if (xhr.readyState > 3) {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber) {\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t } else if (this.defaultValueScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ])});;\n\n\n// WEBPACK FOOTER //\n// rollbar.named-amd.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c09fc587ccaa9d4d1c73","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 14\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 15\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 18\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 20\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 22\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 27\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 28\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/rollbar.noconflict.umd.js b/dist/rollbar.noconflict.umd.js index 3a2abb86d..27b79c485 100644 --- a/dist/rollbar.noconflict.umd.js +++ b/dist/rollbar.noconflict.umd.js @@ -506,7 +506,7 @@ return /******/ (function(modules) { // webpackBootstrap /* global __DEFAULT_ENDPOINT__:false */ var defaultOptions = { - version: ("2.6.0"), + version: ("2.6.1"), scrubFields: (["pw","pass","passwd","password","secret","confirm_password","confirmPassword","password_confirmation","passwordConfirmation","access_token","accessToken","secret_key","secretKey","secretToken","cc-number","card number","cardnumber","cardnum","ccnum","ccnumber","cc num","creditcardnumber","credit card number","newcreditcardnumber","new credit card","creditcardno","credit card no","card#","card #","cc-csc","cvc2","cvv2","ccv2","security code","card verification","name on credit card","name on card","nameoncard","cardholder","card holder","name des karteninhabers","card type","cardtype","cc type","cctype","payment type","expiration date","expirationdate","expdate","cc-exp"]), logLevel: ("debug"), reportLevel: ("debug"), diff --git a/dist/rollbar.noconflict.umd.js.map b/dist/rollbar.noconflict.umd.js.map index aa9bfb779..e906129ec 100644 --- a/dist/rollbar.noconflict.umd.js.map +++ b/dist/rollbar.noconflict.umd.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap b0ec0026772bc8166e7c","webpack:///./src/browser/bundles/rollbar.noconflict.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/utility.js","webpack:///./src/merge.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/queue.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/truncation.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACRA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3bA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;;;;;;;AC3JA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChJA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB;AACA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oCAAmC,OAAO;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;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,oDAAmD,SAAS;AAC5D;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,aAAa;AAChC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACztBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;;AAEA,YAAW,YAAY;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClLA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACjGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtHA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AChIA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC7PA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACjQA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3GA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC,sBAAsB;AAC1D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iDAAgD,aAAa;AAC7D;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA,iBAAgB,cAAc;AAC9B,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;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,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;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,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrlBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.noconflict.umd.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[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap b0ec0026772bc8166e7c","'use strict';\n\nvar rollbar = require('../rollbar');\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.noconflict.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 14\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 15\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 18\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 20\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 22\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 27\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 28\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 7dcff3569b4f9a584ce2","webpack:///./src/browser/bundles/rollbar.noconflict.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/utility.js","webpack:///./src/merge.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/queue.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/truncation.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACRA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3bA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;;;;;;;AC3JA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChJA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB;AACA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oCAAmC,OAAO;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;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,oDAAmD,SAAS;AAC5D;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,aAAa;AAChC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACztBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;;AAEA,YAAW,YAAY;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClLA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACjGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtHA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AChIA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC7PA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACjQA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3GA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC,sBAAsB;AAC1D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iDAAgD,aAAa;AAC7D;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA,iBAAgB,cAAc;AAC9B,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;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,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;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,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrlBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.noconflict.umd.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[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 7dcff3569b4f9a584ce2","'use strict';\n\nvar rollbar = require('../rollbar');\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.noconflict.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 14\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 15\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 18\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 20\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 22\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 27\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 28\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/rollbar.noconflict.umd.min.js b/dist/rollbar.noconflict.umd.min.js index b32fd27f1..68ccfe1e7 100644 --- a/dist/rollbar.noconflict.umd.min.js +++ b/dist/rollbar.noconflict.umd.min.js @@ -1,4 +1,4 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.rollbar=e():t.rollbar=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){t.exports=r(1)},function(t,e,r){"use strict";var n=r(2);"undefined"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),t.exports=n},function(t,e,r){"use strict";function n(t,e){this.options=c.handleOptions(x,t);var r=new l(this.options,h,d);this.client=e||new u(this.options,r,p,"browser");var n="undefined"!=typeof window&&window||"undefined"!=typeof self&&self,o="undefined"!=typeof document&&document;i(this.client.notifier,n),a(this.client.queue),(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(f.captureUncaughtExceptions(n,this),f.wrapGlobals(n,this)),(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&f.captureUnhandledRejections(n,this),this.instrumenter=new w(this.options,this.client.telemeter,this,n,o),this.instrumenter.instrument()}function o(t){var e="Rollbar is not initialized";p.error(e),t&&t(new Error(e))}function i(t,e){t.addTransform(m.handleItemWithError).addTransform(m.ensureItemHasSomethingToSay).addTransform(m.addBaseInfo).addTransform(m.addRequestInfo(e)).addTransform(m.addClientInfo(e)).addTransform(m.addPluginInfo(e)).addTransform(m.addBody).addTransform(g.addMessageWithError).addTransform(g.addTelemetryData).addTransform(g.addConfigToPayload).addTransform(m.scrubPayload).addTransform(g.userTransform(p)).addTransform(g.itemToPayload)}function a(t){t.addPredicate(y.checkLevel).addPredicate(v.checkIgnore).addPredicate(y.userCheckIgnore(p)).addPredicate(y.urlIsNotBlacklisted(p)).addPredicate(y.urlIsWhitelisted(p)).addPredicate(y.messageIsIgnored(p))}function s(t){for(var e=0,r=t.length;e=1&&r>e}function i(t,e,r,n,o,i,s){var u=null;return r&&(r=new Error(r)),r||n||(u=a(t,e,o,i,s)),{error:r,shouldSend:n,payload:u}}function a(t,e,r,n,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:r,itemsPerMinute:n}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}var s=r(5);n.globalSettings={startTime:s.now(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||s.now();var r=e-this.startTime;(r<0||r>=6e4)&&(this.startTime=e,this.perMinCounter=0);var a=n.globalSettings.maxItems,u=n.globalSettings.itemsPerMinute;if(o(t,a,this.counter))return i(this.platform,this.platformOptions,a+" max items reached",!1);if(o(t,u,this.perMinCounter))return i(this.platform,this.platformOptions,u+" items per minute reached",!1);this.counter++,this.perMinCounter++;var c=!o(t,a,this.counter),l=c;return c=c&&!o(t,u,this.perMinCounter),i(this.platform,this.platformOptions,null,c,a,u,l)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,r){"use strict";function n(){if(!q&&(q=!0,c(JSON)&&(s(JSON.stringify)&&(F.stringify=JSON.stringify),s(JSON.parse)&&(F.parse=JSON.parse)),!a(F.stringify)||!a(F.parse))){var t=r(7);t(F)}}function o(t,e){return e===i(t)}function i(t){var e=typeof t;return"object"!==e?e:t?t instanceof Error?"error":{}.toString.call(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase():"null"}function a(t){return o(t,"function")}function s(t){var e=/[\\^$.*+?()[\]{}|]/g,r=Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?"),n=RegExp("^"+r+"$");return u(t)&&n.test(t)}function u(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function c(t){return!o(t,"undefined")}function l(t){var e=i(t);return"object"===e||"array"===e}function p(t){return o(t,"error")||o(t,"exception")}function f(t,e,r){var n,i,a,s=o(t,"object"),u=o(t,"array"),c=[];if(s&&r.indexOf(t)!==-1)return t;if(r.push(t),s)for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&c.push(n);else if(u)for(a=0;as)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var r=e+"//"+t.hostname;return t.port&&(r=r+":"+t.port),t.path&&(r+=t.path),r}function b(t,e){var r,n;try{r=F.stringify(t)}catch(o){if(e&&a(e))try{r=e(t)}catch(t){n=t}else n=o}return{error:n,value:r}}function w(t){var e,r;try{e=F.parse(t)}catch(t){r=t}return{error:r,value:e}}function _(t,e,r,n,o,i,a,s){var u={url:e||"",line:r,column:n};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(r,n){try{e(r,n)}catch(e){t.error(e)}}}function k(t,e,r,n,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=A(u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:P(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),n&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){for(var r=0;r500&&(n=n.substr(0,497)+"...");break;case"null":n="null";break;case"undefined":n="undefined";break;case"symbol":n=n.toString()}o.push(n)}return o.join(" ")}function P(){return Date.now?+Date.now():+new Date}function j(t,e){if(t&&t.user_ip&&e!==!0){var r=t.user_ip;if(e)try{var n;if(r.indexOf(".")!==-1)n=r.split("."),n.pop(),n.push("0"),r=n.join(".");else if(r.indexOf(":")!==-1){if(n=r.split(":"),n.length>2){var o=n.slice(0,3),i=o[2].indexOf("/");i!==-1&&(o[2]=o[2].substring(0,i));var a="0000:0000:0000:0000:0000";r=o.concat(a).join(":")}}else r=null}catch(t){r=null}else r=null;t.user_ip=r}}function R(t,e,r){var n=A(t,e,r);return!e||e.overwriteScrubFields?n:(e.scrubFields&&(n.scrubFields=(t.scrubFields||[]).concat(e.scrubFields)),n)}var A=r(6),F={},q=!1;n();var D={debug:0,info:1,warning:2,error:3,critical:4},M={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},U=["log","network","dom","navigation","error","manual"],H=["critical","error","warning","info","debug"];t.exports={addParamsAndAccessTokenToPath:v,createItem:k,createTelemetryEvent:I,filterIp:j,formatArgsAsString:C,formatUrl:y,get:T,handleOptions:R,isError:p,isFunction:a,isIterable:l,isNativeFunction:s,isType:o,jsonParse:w,LEVELS:D,makeUnhandledStackInfo:_,merge:A,now:P,redact:h,sanitizeUrl:m,scrub:O,set:S,stringify:b,traverse:f,typeName:i,uuid4:d}},function(t,e){"use strict";function r(){var t,e,n,o,a,s={},u=null,c=arguments.length;for(t=0;tn&&(o=this.maxQueueSize-n),this.maxQueueSize=n,this.queue.splice(0,o)},n.prototype.copyEvents=function(){var t=Array.prototype.slice.call(this.queue,0);if(i.isFunction(this.options.filterTelemetry))try{for(var e=t.length;e--;)this.options.filterTelemetry(t[e])&&t.splice(e,1)}catch(t){this.options.filterTelemetry=null}return t},n.prototype.capture=function(t,e,r,n,a){var s={level:o(t,r),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};n&&(s.uuid=n);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},n.prototype.captureEvent=function(t,e,r,n){return this.capture(t,e,r,n)},n.prototype.captureError=function(t,e,r,n){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,r,n)},n.prototype.captureLog=function(t,e,r,n){return this.capture("log",{message:t},e,r,n)},n.prototype.captureNetwork=function(t,e,r,n){e=e||"xhr",t.subtype=t.subtype||e,n&&(t.request=n);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,r)},n.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},n.prototype.captureDom=function(t,e,r,n,o){var i={subtype:t,element:e};return void 0!==r&&(i.value=r),void 0!==n&&(i.checked=n),this.capture("dom",i,"info",o)},n.prototype.captureNavigation=function(t,e,r){return this.capture("navigation",{from:t,to:e},"info",r)},n.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},n.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},n.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},n.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},n.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=n},function(t,e,r){"use strict";function n(t,e,r,n){this.options=t,this.transport=e,this.url=r,this.jsonBackup=n,this.accessToken=t.accessToken,this.transportOptions=o(t,r)}function o(t,e){return a.getTransportFromOptions(t,u,e)}var i=r(5),a=r(12),s=r(13),u={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};n.prototype.postItem=function(t,e){var r=a.transportOptions(this.transportOptions,"POST"),n=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,r,n,e)},n.prototype.buildJsonPayload=function(t,e){var r=a.buildPayload(this.accessToken,t,this.jsonBackup),n=s.truncate(r);return n.error?(e&&e(n.error),null):n.value},n.prototype.postJsonPayload=function(t,e){var r=a.transportOptions(this.transportOptions,"POST");this.transport.postJsonPayload(this.accessToken,r,t,e)},n.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.merge(e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=n},function(t,e,r){"use strict";function n(t,e,r){if(!s.isType(e.context,"string")){var n=s.stringify(e.context,r);n.error?e.context="Error: could not serialize 'context'":e.context=n.value||"", +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.rollbar=e():t.rollbar=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){t.exports=r(1)},function(t,e,r){"use strict";var n=r(2);"undefined"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),t.exports=n},function(t,e,r){"use strict";function n(t,e){this.options=c.handleOptions(x,t);var r=new l(this.options,h,d);this.client=e||new u(this.options,r,p,"browser");var n="undefined"!=typeof window&&window||"undefined"!=typeof self&&self,o="undefined"!=typeof document&&document;i(this.client.notifier,n),a(this.client.queue),(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(f.captureUncaughtExceptions(n,this),f.wrapGlobals(n,this)),(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&f.captureUnhandledRejections(n,this),this.instrumenter=new w(this.options,this.client.telemeter,this,n,o),this.instrumenter.instrument()}function o(t){var e="Rollbar is not initialized";p.error(e),t&&t(new Error(e))}function i(t,e){t.addTransform(m.handleItemWithError).addTransform(m.ensureItemHasSomethingToSay).addTransform(m.addBaseInfo).addTransform(m.addRequestInfo(e)).addTransform(m.addClientInfo(e)).addTransform(m.addPluginInfo(e)).addTransform(m.addBody).addTransform(g.addMessageWithError).addTransform(g.addTelemetryData).addTransform(g.addConfigToPayload).addTransform(m.scrubPayload).addTransform(g.userTransform(p)).addTransform(g.itemToPayload)}function a(t){t.addPredicate(y.checkLevel).addPredicate(v.checkIgnore).addPredicate(y.userCheckIgnore(p)).addPredicate(y.urlIsNotBlacklisted(p)).addPredicate(y.urlIsWhitelisted(p)).addPredicate(y.messageIsIgnored(p))}function s(t){for(var e=0,r=t.length;e=1&&r>e}function i(t,e,r,n,o,i,s){var u=null;return r&&(r=new Error(r)),r||n||(u=a(t,e,o,i,s)),{error:r,shouldSend:n,payload:u}}function a(t,e,r,n,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:r,itemsPerMinute:n}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}var s=r(5);n.globalSettings={startTime:s.now(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||s.now();var r=e-this.startTime;(r<0||r>=6e4)&&(this.startTime=e,this.perMinCounter=0);var a=n.globalSettings.maxItems,u=n.globalSettings.itemsPerMinute;if(o(t,a,this.counter))return i(this.platform,this.platformOptions,a+" max items reached",!1);if(o(t,u,this.perMinCounter))return i(this.platform,this.platformOptions,u+" items per minute reached",!1);this.counter++,this.perMinCounter++;var c=!o(t,a,this.counter),l=c;return c=c&&!o(t,u,this.perMinCounter),i(this.platform,this.platformOptions,null,c,a,u,l)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,r){"use strict";function n(){if(!q&&(q=!0,c(JSON)&&(s(JSON.stringify)&&(F.stringify=JSON.stringify),s(JSON.parse)&&(F.parse=JSON.parse)),!a(F.stringify)||!a(F.parse))){var t=r(7);t(F)}}function o(t,e){return e===i(t)}function i(t){var e=typeof t;return"object"!==e?e:t?t instanceof Error?"error":{}.toString.call(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase():"null"}function a(t){return o(t,"function")}function s(t){var e=/[\\^$.*+?()[\]{}|]/g,r=Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?"),n=RegExp("^"+r+"$");return u(t)&&n.test(t)}function u(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function c(t){return!o(t,"undefined")}function l(t){var e=i(t);return"object"===e||"array"===e}function p(t){return o(t,"error")||o(t,"exception")}function f(t,e,r){var n,i,a,s=o(t,"object"),u=o(t,"array"),c=[];if(s&&r.indexOf(t)!==-1)return t;if(r.push(t),s)for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&c.push(n);else if(u)for(a=0;as)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var r=e+"//"+t.hostname;return t.port&&(r=r+":"+t.port),t.path&&(r+=t.path),r}function b(t,e){var r,n;try{r=F.stringify(t)}catch(o){if(e&&a(e))try{r=e(t)}catch(t){n=t}else n=o}return{error:n,value:r}}function w(t){var e,r;try{e=F.parse(t)}catch(t){r=t}return{error:r,value:e}}function _(t,e,r,n,o,i,a,s){var u={url:e||"",line:r,column:n};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(r,n){try{e(r,n)}catch(e){t.error(e)}}}function k(t,e,r,n,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=A(u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:P(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),n&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){for(var r=0;r500&&(n=n.substr(0,497)+"...");break;case"null":n="null";break;case"undefined":n="undefined";break;case"symbol":n=n.toString()}o.push(n)}return o.join(" ")}function P(){return Date.now?+Date.now():+new Date}function j(t,e){if(t&&t.user_ip&&e!==!0){var r=t.user_ip;if(e)try{var n;if(r.indexOf(".")!==-1)n=r.split("."),n.pop(),n.push("0"),r=n.join(".");else if(r.indexOf(":")!==-1){if(n=r.split(":"),n.length>2){var o=n.slice(0,3),i=o[2].indexOf("/");i!==-1&&(o[2]=o[2].substring(0,i));var a="0000:0000:0000:0000:0000";r=o.concat(a).join(":")}}else r=null}catch(t){r=null}else r=null;t.user_ip=r}}function R(t,e,r){var n=A(t,e,r);return!e||e.overwriteScrubFields?n:(e.scrubFields&&(n.scrubFields=(t.scrubFields||[]).concat(e.scrubFields)),n)}var A=r(6),F={},q=!1;n();var D={debug:0,info:1,warning:2,error:3,critical:4},M={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},U=["log","network","dom","navigation","error","manual"],H=["critical","error","warning","info","debug"];t.exports={addParamsAndAccessTokenToPath:v,createItem:k,createTelemetryEvent:I,filterIp:j,formatArgsAsString:C,formatUrl:y,get:T,handleOptions:R,isError:p,isFunction:a,isIterable:l,isNativeFunction:s,isType:o,jsonParse:w,LEVELS:D,makeUnhandledStackInfo:_,merge:A,now:P,redact:h,sanitizeUrl:m,scrub:O,set:S,stringify:b,traverse:f,typeName:i,uuid4:d}},function(t,e){"use strict";function r(){var t,e,n,o,a,s={},u=null,c=arguments.length;for(t=0;tn&&(o=this.maxQueueSize-n),this.maxQueueSize=n,this.queue.splice(0,o)},n.prototype.copyEvents=function(){var t=Array.prototype.slice.call(this.queue,0);if(i.isFunction(this.options.filterTelemetry))try{for(var e=t.length;e--;)this.options.filterTelemetry(t[e])&&t.splice(e,1)}catch(t){this.options.filterTelemetry=null}return t},n.prototype.capture=function(t,e,r,n,a){var s={level:o(t,r),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};n&&(s.uuid=n);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},n.prototype.captureEvent=function(t,e,r,n){return this.capture(t,e,r,n)},n.prototype.captureError=function(t,e,r,n){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,r,n)},n.prototype.captureLog=function(t,e,r,n){return this.capture("log",{message:t},e,r,n)},n.prototype.captureNetwork=function(t,e,r,n){e=e||"xhr",t.subtype=t.subtype||e,n&&(t.request=n);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,r)},n.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},n.prototype.captureDom=function(t,e,r,n,o){var i={subtype:t,element:e};return void 0!==r&&(i.value=r),void 0!==n&&(i.checked=n),this.capture("dom",i,"info",o)},n.prototype.captureNavigation=function(t,e,r){return this.capture("navigation",{from:t,to:e},"info",r)},n.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},n.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},n.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},n.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},n.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=n},function(t,e,r){"use strict";function n(t,e,r,n){this.options=t,this.transport=e,this.url=r,this.jsonBackup=n,this.accessToken=t.accessToken,this.transportOptions=o(t,r)}function o(t,e){return a.getTransportFromOptions(t,u,e)}var i=r(5),a=r(12),s=r(13),u={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};n.prototype.postItem=function(t,e){var r=a.transportOptions(this.transportOptions,"POST"),n=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,r,n,e)},n.prototype.buildJsonPayload=function(t,e){var r=a.buildPayload(this.accessToken,t,this.jsonBackup),n=s.truncate(r);return n.error?(e&&e(n.error),null):n.value},n.prototype.postJsonPayload=function(t,e){var r=a.transportOptions(this.transportOptions,"POST");this.transport.postJsonPayload(this.accessToken,r,t,e)},n.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.merge(e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=n},function(t,e,r){"use strict";function n(t,e,r){if(!s.isType(e.context,"string")){var n=s.stringify(e.context,r);n.error?e.context="Error: could not serialize 'context'":e.context=n.value||"", e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}}function o(t,e,r){var n=e.hostname,o=e.protocol,i=e.port,a=e.path,s=e.search,u=t.proxy;if(t.endpoint){var c=r.parse(t.endpoint);n=c.hostname,o=c.protocol,i=c.port,a=c.pathname,s=c.search}return{hostname:n,protocol:o,port:i,path:a,search:s,proxy:u}}function i(t,e){var r=t.protocol||"https:",n=t.port||("http:"===r?80:"https:"===r?443:void 0),o=t.hostname,i=t.path;return t.search&&(i+=t.search),t.proxy&&(i=r+"//"+o+i,o=t.proxy.host||t.proxy.hostname,n=t.proxy.port,r=t.proxy.protocol||r),{protocol:r,hostname:o,path:i,port:n,method:e}}function a(t,e){var r=/\/$/.test(t),n=/^\//.test(e);return r&&n?e=e.substring(1):r||n||(e="/"+e),t+e}var s=r(5);t.exports={buildPayload:n,getTransportFromOptions:o,transportOptions:i,appendPathToPath:a}},function(t,e,r){"use strict";function n(t,e){return[t,f.stringify(t,e)]}function o(t,e){var r=t.length;return r>2*e?t.slice(0,e).concat(t.slice(r-e)):t}function i(t,e,r){r="undefined"==typeof r?30:r;var n,i=t.data.body;if(i.trace_chain)for(var a=i.trace_chain,s=0;st?e.slice(0,t-3).concat("..."):e}function s(t,e,r){function n(e,r,o){switch(f.typeName(r)){case"string":return a(t,r);case"object":case"array":return f.traverse(r,n,o);default:return r}}return e=f.traverse(e,n,[]),[e,f.stringify(e,r)]}function u(t){return t.exception&&(delete t.exception.description,t.exception.message=a(255,t.exception.message)),t.frames=o(t.frames,1),t}function c(t,e){var r=t.data.body;if(r.trace_chain)for(var n=r.trace_chain,o=0;oe}function p(t,e,r){r="undefined"==typeof r?524288:r;for(var o,a,u,p=[n,i,s.bind(null,1024),s.bind(null,512),s.bind(null,256),c];o=p.shift();)if(a=o(t,e),t=a[0],u=a[1],u.error||!l(u.value,r))return u;return u}var f=r(5);t.exports={truncate:p,raw:n,truncateFrames:i,truncateStrings:s,maybeTruncateValue:a}},function(t,e,r){"use strict";function n(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.error(s.formatArgsAsString(t)):console.error.apply(console,t)}function o(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.info(s.formatArgsAsString(t)):console.info.apply(console,t)}function i(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.log(s.formatArgsAsString(t)):console.log.apply(console,t)}r(15);var a=r(16),s=r(5);t.exports={error:n,info:o,log:i}},function(t,e){!function(t){"use strict";t.console||(t.console={});for(var e,r,n=t.console,o=function(){},i=["memory"],a="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");e=i.pop();)n[e]||(n[e]={});for(;r=a.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window)},function(t,e){"use strict";function r(){var t;if(!document)return t;for(var e=3,r=document.createElement("div"),n=r.getElementsByTagName("i");r.innerHTML="",n[0];);return e>4?e:t}var n={ieVersion:r};t.exports=n},function(t,e){"use strict";function r(t,e,r){if(t){var o;if("function"==typeof e._rollbarOldOnError)o=e._rollbarOldOnError;else if(t.onerror){for(o=t.onerror;o._rollbarOldOnError;)o=o._rollbarOldOnError;e._rollbarOldOnError=o}var i=function(){var r=Array.prototype.slice.call(arguments,0);n(t,e,o,r)};r&&(i._rollbarOldOnError=o),t.onerror=i}}function n(t,e,r,n){t._rollbarWrappedError&&(n[4]||(n[4]=t._rollbarWrappedError),n[5]||(n[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null),e.handleUncaughtException.apply(e,n),r&&r.apply(t,n)}function o(t,e,r){if(t){"function"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener("unhandledrejection",t._rollbarURH);var n=function(t){var r,n,o;try{r=t.reason}catch(t){r=void 0}try{n=t.promise}catch(t){n="[unhandledrejection] error getting `promise` from event"}try{o=t.detail,!r&&o&&(r=o.reason,n=o.promise)}catch(t){}r||(r="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(r,n)};n.belongsToShim=r,t._rollbarURH=n,t.addEventListener("unhandledrejection",n)}}function i(t,e,r){if(t){var n,o,i="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(n=0;n=400&&t.status<600}function f(t,e){var r=new Error(t);return r.code=e||"ENOTFOUND",r}var h=r(5),d=r(13),m=r(14);t.exports={get:n,post:o,postJsonPayload:i}},function(t,e){"use strict";function r(t){var e,r,n={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(e=t.indexOf("//"),e!==-1?(n.protocol=t.substring(0,e),r=e+2):r=0,e=t.indexOf("@",r),e!==-1&&(n.auth=t.substring(r,e),r=e+1),e=t.indexOf("/",r),e===-1){if(e=t.indexOf("?",r),e===-1)return e=t.indexOf("#",r),e===-1?n.host=t.substring(r):(n.host=t.substring(r,e),n.hash=t.substring(e)),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),n;n.host=t.substring(r,e),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),r=e}else n.host=t.substring(r,e),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),r=e;if(e=t.indexOf("#",r),e===-1?n.path=t.substring(r):(n.path=t.substring(r,e),n.hash=t.substring(e)),n.path){var o=n.path.split("?");n.pathname=o[0],n.query=o[1],n.search=n.query?"?"+n.query:null}return n}t.exports={parse:r}},function(t,e,r){"use strict";function n(t,e,r){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||d.parse(t.err)}catch(e){m.error("Error while parsing the error object.",e);try{t.message=t.err.message||t.err.description||t.message||String(t.err)}catch(e){t.message=String(t.err)||String(e)}delete t.err}r(null,t)}function o(t,e,r){t.message||t.stackInfo||t.custom||r(new Error("No message, stack info, or custom data"),null),r(null,t)}function i(t,e,r){var n=e.payload&&e.payload.environment||e.environment;t.data=h.merge(t.data,{environment:n,level:t.level,endpoint:e.endpoint,platform:"browser",framework:"browser-js",language:"javascript",server:{},uuid:t.uuid,notifier:{name:"rollbar-browser-js",version:e.version}}),r(null,t)}function a(t){return function(e,r,n){if(!t||!t.location)return n(null,e);var o="$remote_ip";r.captureIp?r.captureIp!==!0&&(o+="_anonymize"):o=null,h.set(e,"data.request",{url:t.location.href,query_string:t.location.search,user_ip:o}),n(null,e)}}function s(t){return function(e,r,n){if(!t)return n(null,e);var o=t.navigator||{},i=t.screen||{};h.set(e,"data.client",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:o.userAgent,language:o.language,cookie_enabled:o.cookieEnabled,screen:{width:i.width,height:i.height}}}),n(null,e)}}function u(t){return function(e,r,n){if(!t||!t.navigator)return n(null,e);for(var o,i=[],a=t.navigator.plugins||[],s=0,u=a.length;s-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),n=this.extractLocation(r.pop()),o=r.join(" ")||void 0,i="eval"===n[0]?void 0:n[0];return new t(o,void 0,i,n[1],n[2],e)},this)},parseFFOrSafari:function(n){var o=r(n.stack.split("\n"),function(t){return!t.match(i)},this);return e(o,function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new t(e);var r=e.split("@"),n=this.extractLocation(r.pop()),o=r.shift()||void 0;return new t(o,void 0,n[0],n[1],n[2],e)},this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf("\n")>-1&&t.message.split("\n").length>t.stacktrace.split("\n").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,n=e.message.split("\n"),o=[],i=2,a=n.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new t(a,s,o[0],o[1],o[2],e)},this)}}})},function(t,e,r){var n,o,i;!function(r,a){"use strict";o=[],n=a,i="function"==typeof n?n.apply(e,o):n,!(void 0!==i&&(t.exports=i))}(this,function(){"use strict";function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t,e,r,n,o,i){void 0!==t&&this.setFunctionName(t),void 0!==e&&this.setArgs(e),void 0!==r&&this.setFileName(r),void 0!==n&&this.setLineNumber(n),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return e.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(t){this.functionName=String(t)},getArgs:function(){return this.args},setArgs:function(t){if("[object Array]"!==Object.prototype.toString.call(t))throw new TypeError("Args must be an Array");this.args=t},getFileName:function(){return this.fileName},setFileName:function(t){this.fileName=String(t)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(e){if(!t(e))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(e)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(e){if(!t(e))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(e)},getSource:function(){return this.source},setSource:function(t){this.source=String(t)},toString:function(){var e=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",n=this.getFileName()?"@"+this.getFileName():"",o=t(this.getLineNumber())?":"+this.getLineNumber():"",i=t(this.getColumnNumber())?":"+this.getColumnNumber():"";return e+r+n+o+i}},e})},function(t,e,r){"use strict";function n(t,e,r){var n=e.payload||{};n.body&&delete n.body;var o=u.merge(t.data,n);t._isUncaught&&(o._isUncaught=!0),t._originalArgs&&(o._originalArgs=t._originalArgs),r(null,o)}function o(t,e,r){t.telemetryEvents&&u.set(t,"data.body.telemetry",t.telemetryEvents),r(null,t)}function i(t,e,r){if(!t.message)return void r(null,t);var n="data.body.trace_chain.0",o=u.get(t,n);if(o||(n="data.body.trace",o=u.get(t,n)),o){if(!o.exception||!o.exception.description)return u.set(t,n+".exception.description",t.message),void r(null,t);var i=u.get(t,n+".extra")||{},a=u.merge(i,{message:t.message});u.set(t,n+".extra",a)}r(null,t)}function a(t){return function(e,r,n){var o=u.merge(e);try{u.isFunction(r.transform)&&r.transform(o.data,e)}catch(o){return r.transform=null,t.error("Error while calling custom transform() function. Removing custom transform().",o),void n(null,e)}n(null,o)}}function s(t,e,r){if(!e.sendConfig)return r(null,t);var n="_rollbarConfig",o=u.get(t,"data.custom")||{};o[n]=e,t.data.custom=o,r(null,t)}var u=r(5);t.exports={itemToPayload:n,addTelemetryData:o,addMessageWithError:i,userTransform:a,addConfigToPayload:s}},function(t,e,r){"use strict";function n(t,e){return!o.get(e,"plugins.jquery.ignoreAjaxErrors")||!o.get(t,"body.message.extra.isAjax")}var o=r(5);t.exports={checkIgnore:n}},function(t,e,r){"use strict";function n(t,e){var r=t.level,n=c.LEVELS[r]||0,o=e.reportLevel,i=c.LEVELS[o]||0;return!(n3){a.__rollbar_xhr.end_time_ms=u.now();var r=null;if(e.autoInstrument.networkResponseHeaders){var n=e.autoInstrument.networkResponseHeaders;r={};try{var i,s;if(n===!0){var c=a.getAllResponseHeaders();if(c){var l,p,f=c.trim().split(/[\r\n]+/);for(s=0;s=0&&t.options[t.selectedIndex]&&this.captureDomEvent("input",t,t.options[t.selectedIndex].value)},s.prototype.captureDomEvent=function(t,e,r,n){if(void 0!==r)if(this.scrubTelemetryInputs||"password"===l.getElementType(e))r="[scrubbed]";else{var o=l.describeElement(e);this.telemetryScrubber?this.telemetryScrubber(o)&&(r="[scrubbed]"):this.defaultValueScrubber(o)&&(r="[scrubbed]")}var i=l.elementArrayToString(l.treeToArray(e));this.telemeter.captureDom(t,i,r,n)},s.prototype.deinstrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,r=!e&&this._window.history&&this._window.history.pushState;r&&o(this.replacements,"navigation")},s.prototype.instrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,r=!e&&this._window.history&&this._window.history.pushState;if(r){var o=this;n(this._window,"onpopstate",function(t){return function(){var e=o._location.href;o.handleUrlChange(o._lastHref,e),t&&t.apply(this,arguments)}},this.replacements,"navigation"),n(this._window.history,"pushState",function(t){return function(){var e=arguments.length>2?arguments[2]:void 0;return e&&o.handleUrlChange(o._lastHref,e+""),t.apply(this,arguments)}},this.replacements,"navigation")}},s.prototype.handleUrlChange=function(t,e){var r=c.parse(this._location.href),n=c.parse(e),o=c.parse(t);this._lastHref=e,r.protocol===n.protocol&&r.host===n.host&&(e=n.path+(n.hash||"")),r.protocol===o.protocol&&r.host===o.host&&(t=o.path+(o.hash||"")),this.telemeter.captureNavigation(t,e)},s.prototype.deinstrumentConnectivity=function(){("addEventListener"in this._window||"body"in this._document)&&(this._window.addEventListener?this.removeListeners("connectivity"):o(this.replacements,"connectivity"))},s.prototype.instrumentConnectivity=function(){if("addEventListener"in this._window||"body"in this._document)if(this._window.addEventListener)this.addListener("connectivity",this._window,"online",void 0,function(){this.telemeter.captureConnectivityChange("online")}.bind(this),!0),this.addListener("connectivity",this._window,"offline",void 0,function(){this.telemeter.captureConnectivityChange("offline")}.bind(this),!0);else{var t=this;n(this._document.body,"ononline",function(e){return function(){t.telemeter.captureConnectivityChange("online"),e&&e.apply(this,arguments)}},this.replacements,"connectivity"),n(this._document.body,"onoffline",function(e){return function(){t.telemeter.captureConnectivityChange("offline"),e&&e.apply(this,arguments)}},this.replacements,"connectivity")}},s.prototype.addListener=function(t,e,r,n,o,i){e.addEventListener?(e.addEventListener(r,o,i),this.eventRemovers[t].push(function(){e.removeEventListener(r,o,i)})):n&&(e.attachEvent(n,o),this.eventRemovers[t].push(function(){e.detachEvent(n,o)}))},s.prototype.removeListeners=function(t){for(var e;this.eventRemovers[t].length;)(e=this.eventRemovers[t].shift())()},t.exports=s},function(t,e){"use strict";function r(t){return(t.getAttribute("type")||"").toLowerCase()}function n(t,e,n){if(t.tagName.toLowerCase()!==e.toLowerCase())return!1;if(!n)return!0;t=r(t);for(var o=0;o ",i=o.length,a=[],u=0,c=t.length-1;c>=0;c--){if(e=s(t[c]),r=u+a.length*i+e.length,c=n+3){a.unshift("...");break}a.unshift(e),u+=e.length}return a.join(o)}function s(t){if(!t||!t.tagName)return""; var e=[t.tagName];t.id&&e.push("#"+t.id),t.classes&&e.push("."+t.classes.join("."));for(var r=0;r= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar merge = __webpack_require__(6);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(7);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t // Detect both Error and Firefox Exception type\n\t return isType(e, 'error') || isType(e, 'exception');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t var same = true;\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t same = same && result[k] === obj[k];\n\t }\n\t\n\t return (keys.length != 0 && !same) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t if (!baseUrlParts) {\n\t return '(unknown)';\n\t }\n\t\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t return undefined;\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t\n\t for (var i = 0, l = o.key.length; i < l; ++i) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t case 'exception': // Firefox Exception type\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = merge(custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\tvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\n\tvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\t\n\tfunction arrayIncludes(arr, val) {\n\t for (var k = 0; k < arr.length; ++k) {\n\t if (arr[k] === val) {\n\t return true;\n\t }\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction createTelemetryEvent(args) {\n\t var type, metadata, level;\n\t var arg;\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'string':\n\t if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n\t type = arg;\n\t } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n\t level = arg;\n\t }\n\t break;\n\t case 'object':\n\t metadata = arg;\n\t break;\n\t default:\n\t break;\n\t }\n\t }\n\t var event = {\n\t type: type || 'manual',\n\t metadata: metadata || {},\n\t level: level\n\t };\n\t\n\t return event;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len - 1; ++i) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart) {\n\t return paramPart + redact();\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact();\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; ++i) {\n\t arg = args[i];\n\t switch (typeName(arg)) {\n\t case 'object':\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500) {\n\t arg = arg.substr(0, 497) + '...';\n\t }\n\t break;\n\t case 'null':\n\t arg = 'null';\n\t break;\n\t case 'undefined':\n\t arg = 'undefined';\n\t break;\n\t case 'symbol':\n\t arg = arg.toString();\n\t break;\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tfunction filterIp(requestData, captureIp) {\n\t if (!requestData || !requestData['user_ip'] || captureIp === true) {\n\t return;\n\t }\n\t var newIp = requestData['user_ip'];\n\t if (!captureIp) {\n\t newIp = null;\n\t } else {\n\t try {\n\t var parts;\n\t if (newIp.indexOf('.') !== -1) {\n\t parts = newIp.split('.');\n\t parts.pop();\n\t parts.push('0');\n\t newIp = parts.join('.');\n\t } else if (newIp.indexOf(':') !== -1) {\n\t parts = newIp.split(':');\n\t if (parts.length > 2) {\n\t var beginning = parts.slice(0, 3);\n\t var slashIdx = beginning[2].indexOf('/');\n\t if (slashIdx !== -1) {\n\t beginning[2] = beginning[2].substring(0, slashIdx);\n\t }\n\t var terminal = '0000:0000:0000:0000:0000';\n\t newIp = beginning.concat(terminal).join(':');\n\t }\n\t } else {\n\t newIp = null;\n\t }\n\t } catch (e) {\n\t newIp = null;\n\t }\n\t }\n\t requestData['user_ip'] = newIp;\n\t}\n\t\n\tfunction handleOptions(current, input, payload) {\n\t var result = merge(current, input, payload);\n\t if (!input || input.overwriteScrubFields) {\n\t return result;\n\t }\n\t if (input.scrubFields) {\n\t result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t createItem: createItem,\n\t createTelemetryEvent: createTelemetryEvent,\n\t filterIp: filterIp,\n\t formatArgsAsString: formatArgsAsString,\n\t formatUrl: formatUrl,\n\t get: get,\n\t handleOptions: handleOptions,\n\t isError: isError,\n\t isFunction: isFunction,\n\t isIterable: isIterable,\n\t isNativeFunction: isNativeFunction,\n\t isType: isType,\n\t jsonParse: jsonParse,\n\t LEVELS: LEVELS,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t merge: merge,\n\t now: now,\n\t redact: redact,\n\t sanitizeUrl: sanitizeUrl,\n\t scrub: scrub,\n\t set: set,\n\t stringify: stringify,\n\t traverse: traverse,\n\t typeName: typeName,\n\t uuid4: uuid4\n\t};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tfunction merge() {\n\t var i, src, copy, clone, name,\n\t result = {},\n\t current = null,\n\t length = arguments.length;\n\t\n\t for (i=0; i < length; i++) {\n\t current = arguments[i];\n\t if (current == null) {\n\t continue;\n\t }\n\t\n\t for (name in current) {\n\t src = result[name];\n\t copy = current[name];\n\t if (result !== copy) {\n\t if (copy && isPlainObject(copy)) {\n\t clone = src && isPlainObject(src) ? src : {};\n\t result[name] = merge(clone, copy);\n\t } else if (typeof copy !== 'undefined') {\n\t result[name] = copy;\n\t }\n\t }\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = merge;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.merge(options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t var events = Array.prototype.slice.call(this.queue, 0);\n\t if (_.isFunction(this.options.filterTelemetry)) {\n\t try {\n\t var i = events.length;\n\t while (i--) {\n\t if (this.options.filterTelemetry(events[i])) {\n\t events.splice(i, 1);\n\t }\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t }\n\t return events;\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (exc) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n\t return this.capture(type, metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar helpers = __webpack_require__(12);\n\tvar truncation = __webpack_require__(13);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.buildJsonPayload = function(data, callback) {\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t if (callback) {\n\t callback(stringifyResult.error);\n\t }\n\t return null;\n\t }\n\t\n\t return stringifyResult.value;\n\t};\n\t\n\t/**\n\t *\n\t * @param jsonPayload\n\t * @param callback\n\t */\n\tApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.merge(oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction raw(payload, jsonBackup) {\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction selectFrames(frames, range) {\n\t var len = frames.length;\n\t if (len > range * 2) {\n\t return frames.slice(0, range).concat(frames.slice(len - range));\n\t }\n\t return frames;\n\t}\n\t\n\tfunction truncateFrames(payload, jsonBackup, range) {\n\t range = (typeof range === 'undefined') ? 30 : range;\n\t var body = payload.data.body;\n\t var frames;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t frames = chain[i].frames;\n\t frames = selectFrames(frames, range);\n\t chain[i].frames = frames;\n\t }\n\t } else if (body.trace) {\n\t frames = body.trace.frames;\n\t frames = selectFrames(frames, range);\n\t body.trace.frames = frames;\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction maybeTruncateValue(len, val) {\n\t if (!val) {\n\t return val;\n\t }\n\t if (val.length > len) {\n\t return val.slice(0, len - 3).concat('...');\n\t }\n\t return val;\n\t}\n\t\n\tfunction truncateStrings(len, payload, jsonBackup) {\n\t function truncator(k, v, seen) {\n\t switch (_.typeName(v)) {\n\t case 'string':\n\t return maybeTruncateValue(len, v);\n\t case 'object':\n\t case 'array':\n\t return _.traverse(v, truncator, seen);\n\t default:\n\t return v;\n\t }\n\t }\n\t payload = _.traverse(payload, truncator, []);\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction truncateTraceData(traceData) {\n\t if (traceData.exception) {\n\t delete traceData.exception.description;\n\t traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n\t }\n\t traceData.frames = selectFrames(traceData.frames, 1);\n\t return traceData;\n\t}\n\t\n\tfunction minBody(payload, jsonBackup) {\n\t var body = payload.data.body;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t chain[i] = truncateTraceData(chain[i]);\n\t }\n\t } else if (body.trace) {\n\t body.trace = truncateTraceData(body.trace);\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction needsTruncation(payload, maxSize) {\n\t return payload.length > maxSize;\n\t}\n\t\n\tfunction truncate(payload, jsonBackup, maxSize) {\n\t maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n\t var strategies = [\n\t raw,\n\t truncateFrames,\n\t truncateStrings.bind(null, 1024),\n\t truncateStrings.bind(null, 512),\n\t truncateStrings.bind(null, 256),\n\t minBody\n\t ];\n\t var strategy, results, result;\n\t\n\t while ((strategy = strategies.shift())) {\n\t results = strategy(payload, jsonBackup);\n\t payload = results[0];\n\t result = results[1];\n\t if (result.error || !needsTruncation(result.value, maxSize)) {\n\t return result;\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t truncate: truncate,\n\t\n\t /* for testing */\n\t raw: raw,\n\t truncateFrames: truncateFrames,\n\t truncateStrings: truncateStrings,\n\t maybeTruncateValue: maybeTruncateValue\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(15);\n\tvar detection = __webpack_require__(16);\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror) {\n\t oldOnError = window.onerror;\n\t while (oldOnError._rollbarOldOnError) {\n\t oldOnError = oldOnError._rollbarOldOnError;\n\t }\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t if (shim) {\n\t fn._rollbarOldOnError = oldOnError;\n\t }\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t // Ignore\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/*global XDomainRequest*/\n\t\n\tvar _ = __webpack_require__(5);\n\tvar truncation = __webpack_require__(13);\n\tvar logger = __webpack_require__(14);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n\t}\n\t\n\t// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n\t// so Angular change detection isn't triggered on each API call.\n\t// This is the equivalent of runOutsideAngular().\n\t//\n\tfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\t\n\t if (currentZone && currentZone._name === 'angular') {\n\t var rootZone = currentZone._parent;\n\t rootZone.run(function () {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t });\n\t } else {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t }\n\t}\n\t\n\t/* global RollbarProxy */\n\tfunction _proxyRequest(json, callback) {\n\t var rollbarProxy = new RollbarProxy();\n\t rollbarProxy.sendJsonPayload(\n\t json,\n\t function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n\t function(err) {\n\t callback(new Error(err));\n\t }\n\t );\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t if (typeof RollbarProxy !== 'undefined') {\n\t return _proxyRequest(data, callback);\n\t }\n\t\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post,\n\t postJsonPayload: postJsonPayload\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar errorParser = __webpack_require__(21);\n\tvar logger = __webpack_require__(14);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e) {\n\t logger.error('Error while parsing the error object.', e);\n\t try {\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t } catch (e2) {\n\t item.message = String(item.err) || String(e2);\n\t }\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.merge(item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t var remoteString = '$remote_ip';\n\t if (!options.captureIp) {\n\t remoteString = null;\n\t } else if (options.captureIp !== true) {\n\t remoteString += '_anonymize';\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: remoteString\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.merge(custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (options.sendFrameUrl) {\n\t frame.url = stackFrame.url;\n\t }\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.merge(custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(22);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext();\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t var name = exception.constructor && exception.constructor.name;\n\t if (!name || !name.length || name.length < 3) {\n\t name = exception.name;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(23)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.merge(item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.merge(extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.merge(item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data, item);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar urlparser = __webpack_require__(19);\n\tvar domUtil = __webpack_require__(28);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction nameFromDescription(description) {\n\t if (!description || !description.attributes) { return null; }\n\t var attrs = description.attributes;\n\t for (var a = 0; a < attrs.length; ++a) {\n\t if (attrs[a].key === 'name') {\n\t return attrs[a].value;\n\t }\n\t }\n\t return null;\n\t}\n\t\n\tfunction defaultValueScrubber(scrubFields) {\n\t var patterns = [];\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t patterns.push(new RegExp(scrubFields[i], 'i'));\n\t }\n\t return function(description) {\n\t var name = nameFromDescription(description);\n\t if (!name) { return false; }\n\t for (var i = 0; i < patterns.length; ++i) {\n\t if (patterns[i].test(name)) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t };\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.merge(this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState < 2) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t }\n\t if (xhr.readyState > 3) {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber) {\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t } else if (this.defaultValueScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// rollbar.noconflict.umd.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap b07333370afcb50fd693","'use strict';\n\nvar rollbar = require('../rollbar');\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.noconflict.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 14\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 15\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 18\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 20\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 22\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 27\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 28\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///rollbar.noconflict.umd.min.js","webpack:///webpack/bootstrap 061f134eb57b41e0c7d9","webpack:///./src/browser/bundles/rollbar.noconflict.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/utility.js","webpack:///./src/merge.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/queue.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/truncation.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","rollbar","window","_rollbarStartTime","Date","getTime","Rollbar","options","client","_","handleOptions","defaultOptions","api","API","transport","urllib","Client","logger","gWindow","self","gDocument","document","addTransformsToNotifier","notifier","addPredicatesToQueue","queue","captureUncaught","handleUncaughtExceptions","globals","captureUncaughtExceptions","wrapGlobals","captureUnhandledRejections","handleUnhandledRejections","instrumenter","Instrumenter","telemeter","instrument","handleUninitialized","maybeCallback","message","error","Error","addTransform","transforms","handleItemWithError","ensureItemHasSomethingToSay","addBaseInfo","addRequestInfo","addClientInfo","addPluginInfo","addBody","sharedTransforms","addMessageWithError","addTelemetryData","addConfigToPayload","scrubPayload","userTransform","itemToPayload","addPredicate","sharedPredicates","checkLevel","predicates","checkIgnore","userCheckIgnore","urlIsNotBlacklisted","urlIsWhitelisted","messageIsIgnored","_getFirstFunction","args","i","len","length","isFunction","errorParser","_instance","init","global","configure","prototype","payloadData","oldOptions","payload","lastError","log","item","_createItem","arguments","uuid","apply","debug","info","warn","warning","critical","buildJsonPayload","sendJsonPayload","jsonPayload","handleUncaughtException","url","lineno","colno","context","stackInfo","makeUnhandledStackInfo","isError","_unhandledStackInfo","level","uncaughtErrorLevel","_isUncaught","handleUnhandledRejection","reason","promise","reasonResult","stringify","value","_rollbarContext","_originalArgs","push","wrap","f","_before","ctxFn","_isWrap","_rollbar_wrapped","exc","e","_rollbarWrappedError","isType","String","_wrappedSource","toString","hasOwnProperty","prop","captureEvent","event","createTelemetryEvent","type","metadata","captureDomContentLoaded","ts","captureLoad","createItem","version","scrubFields","logLevel","reportLevel","endpoint","verbose","enabled","sendConfig","includeItemsInTelemetry","captureIp","platform","merge","rateLimiter","configureGlobal","setPlatformOptions","Queue","Notifier","Telemeter","lastErrorHash","generateItemHash","stack","err","RateLimiter","maxItems","itemsPerMinute","_defaultLogLevel","_log","wait","callback","postJsonPayload","defaultLevel","_sameAsLastError","_captureRollbarItem","telemetryEvents","copyEvents","itemHash","startTime","now","counter","perMinCounter","platformOptions","checkRate","limit","ignoreRateLimit","shouldSendValue","shouldSend","globalRateLimit","limitPerMin","perMinute","rateLimitPayload","msg","environment","body","extra","language","framework","name","globalSettings","undefined","elapsedTime","globalRateLimitPerMin","setupJSON","__initRollbarJSON","isDefined","JSON","isNativeFunction","RollbarJSON","parse","setupCustomJSON","x","t","typeName","match","toLowerCase","reRegExpChar","funcMatchString","Function","Object","replace","reIsNative","RegExp","isObject","test","u","isIterable","traverse","obj","func","seen","k","v","isObj","isArray","keys","indexOf","result","same","redact","uuid4","d","r","Math","random","floor","sanitizeUrl","baseUrlParts","parseUri","anchor","source","query","str","o","parseUriOptions","parser","strictMode","exec","uri","l","key","q","$0","$1","$2","addParamsAndAccessTokenToPath","accessToken","params","access_token","paramsArray","join","sort","path","qs","h","substring","formatUrl","protocol","port","hostname","backup","jsonError","backupError","jsonParse","s","mode","backupMessage","location","line","column","guessFunctionName","gatherContext","href","useragent","navigator","userAgent","wrapCallback","resp","requestKeys","lambdaContext","custom","request","arg","extraArgs","typ","DOMException","j","timestamp","arrayIncludes","arr","val","TELEMETRY_TYPES","TELEMETRY_LEVELS","get","split","set","temp","replacement","scrub","data","redactQueryParam","dummy0","paramPart","paramScrubber","queryRes","valScrubber","paramRes","scrubber","tmpV","_getScrubFieldRegexs","_getScrubQueryParamRegexs","pat","ret","formatArgsAsString","substr","filterIp","requestData","newIp","parts","pop","beginning","slice","slashIdx","terminal","concat","current","input","overwriteScrubFields","LEVELS","strict","loose","src","copy","clone","isPlainObject","hasOwn","toStr","hasOwnConstructor","hasIsPrototypeOf","constructor","n","this_value","valueOf","quote","string","rx_escapable","lastIndex","a","meta","charCodeAt","holder","partial","mind","gap","toJSON","rep","isFinite","indent","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Boolean","Number","\b","\t","\n","\f","\r","\"","\\","replacer","space","","debackslashify","text","ignore","b","fromCharCode","parseInt","escapes","state","container","/","go","firstokey","okey","ovalue","firstavalue","avalue","number","action","{","}","ocomma","[","]","acomma",":","colon","SyntaxError",",","true","false","null","reviver","tx","walk","pendingItems","pendingRequests","retryQueue","retryHandle","waitCallback","waitIntervalID","predicate","addPendingItem","removePendingItem","idx","splice","addItem","originalError","originalItem","predicateResult","_applyPredicates","stop","_maybeLog","_makeApiRequest","_dequeuePendingRequest","bind","_maybeCallWait","clearInterval","setInterval","rateLimitResponse","postItem","_maybeRetry","RETRIABLE_ERRORS","shouldRetry","retryInterval","code","_retryApiRequest","retryObject","shift","transform","_applyTransforms","transformIndex","transformsLength","cb","maxTelemetryEvents","MAX_EVENTS","maxQueueSize","max","min","getLevel","manual","newMaxEvents","deleteCount","events","Array","filterTelemetry","capture","rollbarUUID","timestamp_ms","captureError","captureLog","captureNetwork","subtype","levelFromStatus","status_code","statusCode","captureDom","element","checked","captureNavigation","from","to","captureConnectivityChange","change","Api","jsonBackup","transportOptions","_getTransport","helpers","getTransportFromOptions","truncation","search","buildPayload","post","stringifyResult","truncate","contextResult","defaults","proxy","opts","pathname","method","host","appendPathToPath","base","baseTrailingSlash","pathBeginningSlash","raw","selectFrames","frames","range","truncateFrames","trace_chain","chain","trace","maybeTruncateValue","truncateStrings","truncator","truncateTraceData","traceData","exception","description","minBody","needsTruncation","maxSize","strategy","results","strategies","unshift","detection","ieVersion","console","con","dummy","properties","methods","getIEVersion","undef","div","createElement","all","getElementsByTagName","innerHTML","Detection","handler","shim","oldOnError","_rollbarOldOnError","onerror","fn","_rollbarWindowOnError","old","_rollbarURH","belongsToShim","removeEventListener","rejectionHandler","evt","detail","addEventListener","_extendListenerPrototype","oldAddEventListener","_rollbarOldAdd","addFn","bubble","oldRemoveEventListener","_rollbarOldRemove","removeFn","requestFactory","_makeZoneRequest","writeData","currentZone","Zone","_name","rootZone","_parent","run","_makeRequest","_proxyRequest","json","rollbarProxy","RollbarProxy","_msg","_createXMLHTTPObject","onreadystatechange","readyState","parseResponse","responseText","_isSuccess","_isNormalFailure","status","_newRetriableError","ex","open","setRequestHeader","send","e1","XDomainRequest","xdomainrequest","onprogress","ontimeout","onload","e2","xmlhttp","factories","XMLHttpRequest","ActiveXObject","numFactories","last","auth","hash","pathParts","_savedStackTrace","server","remoteString","query_string","user_ip","nav","scr","screen","runtime_ms","round","javascript","browser","cookie_enabled","cookieEnabled","width","height","cur","plugins","navPlugins","addBodyTrace","addBodyMessage","messageResult","guess","guessErrorClass","className","class","rawStack","rawException","stackFrame","frame","pre","contextLength","mid","filename","sendFrameUrl","endsWith","reverse","UNKNOWN_FUNCTION","Frame","_stackFrame","fileName","lineNumber","functionName","columnNumber","Stack","getStack","parserStack","ErrorStackParser","errMsg","errClassMatch","ERR_CLASS_REGEXP","errClass","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","StackFrame","_map","array","thisArg","map","output","_filter","filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","isNaN","parseFloat","filtered","tokens","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","_isNumber","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","getArgs","TypeError","getFileName","getLineNumber","getColumnNumber","getSource","payloadOptions","tracePath","newExtra","newItem","configKey","settings","levelVal","reportLevelVal","isUncaught","onSendCallback","urlIsOnAList","whiteOrBlack","black","list","frameLength","listLength","urlRegex","hostBlackList","hostWhiteList","listName","exceptionMessage","ignoredMessages","rIgnoredMessage","traceMessage","bodyMessage","replacements","orig","restore","nameFromDescription","attributes","attrs","defaultValueScrubber","patterns","_window","_document","autoInstrument","scrubTelemetryInputs","telemetryScrubber","network","navigation","connectivity","eventRemovers","dom","_location","_lastHref","urlparser","domUtil","networkResponseHeaders","networkResponseBody","networkRequestBody","oldSettings","deinstrumentNetwork","instrumentNetwork","deinstrumentConsole","instrumentConsole","deinstrumentDom","instrumentDom","deinstrumentNavigation","instrumentNavigation","deinstrumentConnectivity","instrumentConnectivity","wrapProp","xhr","xhrp","__rollbar_xhr","start_time_ms","end_time_ms","onreadystatechangeHandler","__rollbar_event","headers","headersConfig","header","allHeaders","getAllResponseHeaders","trim","getResponseHeader","response","then","wrapConsole","origConsole","removeListeners","clickHandler","handleClick","blurHandler","handleBlur","addListener","getElementFromEvent","hasTag","tagName","anchorOrButton","isDescribedElement","captureDomEvent","handleSelectInputChanged","elem","multiple","selected","selectedIndex","isChecked","getElementType","describeElement","elementString","elementArrayToString","treeToArray","chrome","chromePackagedApp","app","runtime","hasPushState","history","pushState","handleUrlChange","parsedHref","parsedTo","parsedFrom","section","altType","attachEvent","detachEvent","getAttribute","subtypes","doc","target","elementFromPoint","clientX","clientY","nextDescription","MAX_HEIGHT","out","parentNode","nextStr","totalLength","MAX_LENGTH","separator","separatorLength","descriptionToString","desc","classes","attr"],"mappings":"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","file":"rollbar.noconflict.umd.min.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[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(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[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar rollbar = __webpack_require__(2);\n\t\n\tif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n\t window._rollbarStartTime = (new Date()).getTime();\n\t}\n\t\n\tmodule.exports = rollbar;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Client = __webpack_require__(3);\n\tvar _ = __webpack_require__(5);\n\tvar API = __webpack_require__(11);\n\tvar logger = __webpack_require__(14);\n\tvar globals = __webpack_require__(17);\n\t\n\tvar transport = __webpack_require__(18);\n\tvar urllib = __webpack_require__(19);\n\t\n\tvar transforms = __webpack_require__(20);\n\tvar sharedTransforms = __webpack_require__(24);\n\tvar predicates = __webpack_require__(25);\n\tvar sharedPredicates = __webpack_require__(26);\n\tvar errorParser = __webpack_require__(21);\n\tvar Instrumenter = __webpack_require__(27);\n\t\n\tfunction Rollbar(options, client) {\n\t this.options = _.handleOptions(defaultOptions, options);\n\t var api = new API(this.options, transport, urllib);\n\t this.client = client || new Client(this.options, api, logger, 'browser');\n\t\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var gDocument = (typeof document != 'undefined') && document;\n\t addTransformsToNotifier(this.client.notifier, gWindow);\n\t addPredicatesToQueue(this.client.queue);\n\t if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n\t globals.captureUncaughtExceptions(gWindow, this);\n\t globals.wrapGlobals(gWindow, this);\n\t }\n\t if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n\t globals.captureUnhandledRejections(gWindow, this);\n\t }\n\t\n\t this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n\t this.instrumenter.instrument();\n\t}\n\t\n\tvar _instance = null;\n\tRollbar.init = function(options, client) {\n\t if (_instance) {\n\t return _instance.global(options).configure(options);\n\t }\n\t _instance = new Rollbar(options, client);\n\t return _instance;\n\t};\n\t\n\tfunction handleUninitialized(maybeCallback) {\n\t var message = 'Rollbar is not initialized';\n\t logger.error(message);\n\t if (maybeCallback) {\n\t maybeCallback(new Error(message));\n\t }\n\t}\n\t\n\tRollbar.prototype.global = function(options) {\n\t this.client.global(options);\n\t return this;\n\t};\n\tRollbar.global = function(options) {\n\t if (_instance) {\n\t return _instance.global(options);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.handleOptions(oldOptions, options, payload);\n\t this.client.configure(this.options, payloadData);\n\t this.instrumenter.configure(this.options);\n\t return this;\n\t};\n\tRollbar.configure = function(options, payloadData) {\n\t if (_instance) {\n\t return _instance.configure(options, payloadData);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.lastError = function() {\n\t return this.client.lastError;\n\t};\n\tRollbar.lastError = function() {\n\t if (_instance) {\n\t return _instance.lastError();\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.log = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.log(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.log = function() {\n\t if (_instance) {\n\t return _instance.log.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.debug = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.debug(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.debug = function() {\n\t if (_instance) {\n\t return _instance.debug.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.info = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.info(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.info = function() {\n\t if (_instance) {\n\t return _instance.info.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warn = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warn(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warn = function() {\n\t if (_instance) {\n\t return _instance.warn.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warning = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warning(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warning = function() {\n\t if (_instance) {\n\t return _instance.warning.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.error = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.error(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.error = function() {\n\t if (_instance) {\n\t return _instance.error.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.critical = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.critical(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.critical = function() {\n\t if (_instance) {\n\t return _instance.critical.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.buildJsonPayload = function(item) {\n\t return this.client.buildJsonPayload(item);\n\t};\n\tRollbar.buildJsonPayload = function() {\n\t if (_instance) {\n\t return _instance.buildJsonPayload.apply(_instance, arguments);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n\t return this.client.sendJsonPayload(jsonPayload);\n\t};\n\tRollbar.sendJsonPayload = function() {\n\t if (_instance) {\n\t return _instance.sendJsonPayload.apply(_instance, arguments);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n\t var item;\n\t var stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t 'onerror',\n\t 'uncaught exception',\n\t errorParser\n\t );\n\t if (_.isError(error)) {\n\t item = this._createItem([message, error, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else if (_.isError(url)) {\n\t item = this._createItem([message, url, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else {\n\t item = this._createItem([message, context]);\n\t item.stackInfo = stackInfo;\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n\t var message = 'unhandled rejection was null or undefined!';\n\t if (reason) {\n\t if (reason.message) {\n\t message = reason.message;\n\t } else {\n\t var reasonResult = _.stringify(reason);\n\t if (reasonResult.value) {\n\t message = reasonResult.value;\n\t }\n\t }\n\t }\n\t var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\t\n\t var item;\n\t if (_.isError(reason)) {\n\t item = this._createItem([message, reason, context]);\n\t } else {\n\t item = this._createItem([message, reason, context]);\n\t item.stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t '',\n\t 0,\n\t 0,\n\t null,\n\t 'unhandledrejection',\n\t '',\n\t errorParser\n\t );\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t item._originalArgs = item._originalArgs || [];\n\t item._originalArgs.push(promise);\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.wrap = function(f, context, _before) {\n\t try {\n\t var ctxFn;\n\t if(_.isFunction(context)) {\n\t ctxFn = context;\n\t } else {\n\t ctxFn = function() { return context || {}; };\n\t }\n\t\n\t if (!_.isFunction(f)) {\n\t return f;\n\t }\n\t\n\t if (f._isWrap) {\n\t return f;\n\t }\n\t\n\t if (!f._rollbar_wrapped) {\n\t f._rollbar_wrapped = function () {\n\t if (_before && _.isFunction(_before)) {\n\t _before.apply(this, arguments);\n\t }\n\t try {\n\t return f.apply(this, arguments);\n\t } catch(exc) {\n\t var e = exc;\n\t if (e && window._rollbarWrappedError !== e) {\n\t if (_.isType(e, 'string')) {\n\t e = new String(e);\n\t }\n\t e._rollbarContext = ctxFn() || {};\n\t e._rollbarContext._wrappedSource = f.toString();\n\t\n\t window._rollbarWrappedError = e;\n\t }\n\t throw e;\n\t }\n\t };\n\t\n\t f._rollbar_wrapped._isWrap = true;\n\t\n\t if (f.hasOwnProperty) {\n\t for (var prop in f) {\n\t if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n\t f._rollbar_wrapped[prop] = f[prop];\n\t }\n\t }\n\t }\n\t }\n\t\n\t return f._rollbar_wrapped;\n\t } catch (e) {\n\t // Return the original function if the wrap fails.\n\t return f;\n\t }\n\t};\n\tRollbar.wrap = function(f, context) {\n\t if (_instance) {\n\t return _instance.wrap(f, context);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.captureEvent = function() {\n\t var event = _.createTelemetryEvent(arguments);\n\t return this.client.captureEvent(event.type, event.metadata, event.level);\n\t};\n\tRollbar.captureEvent = function() {\n\t if (_instance) {\n\t return _instance.captureEvent.apply(_instance, arguments);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\t// The following two methods are used internally and are not meant for public use\n\tRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureLoad(ts);\n\t};\n\t\n\t/* Internal */\n\t\n\tfunction addTransformsToNotifier(notifier, gWindow) {\n\t notifier\n\t .addTransform(transforms.handleItemWithError)\n\t .addTransform(transforms.ensureItemHasSomethingToSay)\n\t .addTransform(transforms.addBaseInfo)\n\t .addTransform(transforms.addRequestInfo(gWindow))\n\t .addTransform(transforms.addClientInfo(gWindow))\n\t .addTransform(transforms.addPluginInfo(gWindow))\n\t .addTransform(transforms.addBody)\n\t .addTransform(sharedTransforms.addMessageWithError)\n\t .addTransform(sharedTransforms.addTelemetryData)\n\t .addTransform(sharedTransforms.addConfigToPayload)\n\t .addTransform(transforms.scrubPayload)\n\t .addTransform(sharedTransforms.userTransform(logger))\n\t .addTransform(sharedTransforms.itemToPayload);\n\t}\n\t\n\tfunction addPredicatesToQueue(queue) {\n\t queue\n\t .addPredicate(sharedPredicates.checkLevel)\n\t .addPredicate(predicates.checkIgnore)\n\t .addPredicate(sharedPredicates.userCheckIgnore(logger))\n\t .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n\t .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n\t .addPredicate(sharedPredicates.messageIsIgnored(logger));\n\t}\n\t\n\tRollbar.prototype._createItem = function(args) {\n\t return _.createItem(args, logger, this);\n\t};\n\t\n\tfunction _getFirstFunction(args) {\n\t for (var i = 0, len = args.length; i < len; ++i) {\n\t if (_.isFunction(args[i])) {\n\t return args[i];\n\t }\n\t }\n\t return undefined;\n\t}\n\t\n\t/* global __NOTIFIER_VERSION__:false */\n\t/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n\t/* global __DEFAULT_LOG_LEVEL__:false */\n\t/* global __DEFAULT_REPORT_LEVEL__:false */\n\t/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n\t/* global __DEFAULT_ENDPOINT__:false */\n\t\n\tvar defaultOptions = {\n\t version: (\"2.6.1\"),\n\t scrubFields: ([\"pw\",\"pass\",\"passwd\",\"password\",\"secret\",\"confirm_password\",\"confirmPassword\",\"password_confirmation\",\"passwordConfirmation\",\"access_token\",\"accessToken\",\"secret_key\",\"secretKey\",\"secretToken\",\"cc-number\",\"card number\",\"cardnumber\",\"cardnum\",\"ccnum\",\"ccnumber\",\"cc num\",\"creditcardnumber\",\"credit card number\",\"newcreditcardnumber\",\"new credit card\",\"creditcardno\",\"credit card no\",\"card#\",\"card #\",\"cc-csc\",\"cvc2\",\"cvv2\",\"ccv2\",\"security code\",\"card verification\",\"name on credit card\",\"name on card\",\"nameoncard\",\"cardholder\",\"card holder\",\"name des karteninhabers\",\"card type\",\"cardtype\",\"cc type\",\"cctype\",\"payment type\",\"expiration date\",\"expirationdate\",\"expdate\",\"cc-exp\"]),\n\t logLevel: (\"debug\"),\n\t reportLevel: (\"debug\"),\n\t uncaughtErrorLevel: (\"error\"),\n\t endpoint: (\"api.rollbar.com/api/1/item/\"),\n\t verbose: false,\n\t enabled: true,\n\t sendConfig: false,\n\t includeItemsInTelemetry: true,\n\t captureIp: true\n\t};\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar RateLimiter = __webpack_require__(4);\n\tvar Queue = __webpack_require__(8);\n\tvar Notifier = __webpack_require__(9);\n\tvar Telemeter = __webpack_require__(10);\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Rollbar - the interface to Rollbar\n\t *\n\t * @param options\n\t * @param api\n\t * @param logger\n\t */\n\tfunction Rollbar(options, api, logger, platform) {\n\t this.options = _.merge(options);\n\t this.logger = logger;\n\t Rollbar.rateLimiter.configureGlobal(this.options);\n\t Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n\t this.api = api;\n\t this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n\t this.notifier = new Notifier(this.queue, this.options);\n\t this.telemeter = new Telemeter(this.options);\n\t this.lastError = null;\n\t this.lastErrorHash = 'none';\n\t}\n\t\n\tvar defaultOptions = {\n\t maxItems: 0,\n\t itemsPerMinute: 60\n\t};\n\t\n\tRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\t\n\tRollbar.prototype.global = function(options) {\n\t Rollbar.rateLimiter.configureGlobal(options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.merge(oldOptions, options, payload);\n\t this.notifier && this.notifier.configure(this.options);\n\t this.telemeter && this.telemeter.configure(this.options);\n\t this.global(this.options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.log = function(item) {\n\t var level = this._defaultLogLevel();\n\t return this._log(level, item);\n\t};\n\t\n\tRollbar.prototype.debug = function(item) {\n\t this._log('debug', item);\n\t};\n\t\n\tRollbar.prototype.info = function(item) {\n\t this._log('info', item);\n\t};\n\t\n\tRollbar.prototype.warn = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.warning = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.error = function(item) {\n\t this._log('error', item);\n\t};\n\t\n\tRollbar.prototype.critical = function(item) {\n\t this._log('critical', item);\n\t};\n\t\n\tRollbar.prototype.wait = function(callback) {\n\t this.queue.wait(callback);\n\t};\n\t\n\tRollbar.prototype.captureEvent = function(type, metadata, level) {\n\t return this.telemeter.captureEvent(type, metadata, level);\n\t};\n\t\n\tRollbar.prototype.captureDomContentLoaded = function(ts) {\n\t return this.telemeter.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(ts) {\n\t return this.telemeter.captureLoad(ts);\n\t};\n\t\n\tRollbar.prototype.buildJsonPayload = function(item) {\n\t return this.api.buildJsonPayload(item);\n\t};\n\t\n\tRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n\t this.api.postJsonPayload(jsonPayload);\n\t};\n\t\n\t/* Internal */\n\t\n\tRollbar.prototype._log = function(defaultLevel, item) {\n\t var callback;\n\t if (item.callback) {\n\t callback = item.callback;\n\t delete item.callback;\n\t }\n\t if (this._sameAsLastError(item)) {\n\t if (callback) {\n\t var error = new Error('ignored identical item');\n\t error.item = item;\n\t callback(error);\n\t }\n\t return;\n\t }\n\t try {\n\t item.level = item.level || defaultLevel;\n\t this.telemeter._captureRollbarItem(item);\n\t item.telemetryEvents = this.telemeter.copyEvents();\n\t this.notifier.log(item, callback);\n\t } catch (e) {\n\t this.logger.error(e);\n\t }\n\t};\n\t\n\tRollbar.prototype._defaultLogLevel = function() {\n\t return this.options.logLevel || 'debug';\n\t};\n\t\n\tRollbar.prototype._sameAsLastError = function(item) {\n\t if (!item._isUncaught) {\n\t return false;\n\t }\n\t var itemHash = generateItemHash(item);\n\t if (this.lastErrorHash === itemHash) {\n\t return true;\n\t }\n\t this.lastError = item.err;\n\t this.lastErrorHash = itemHash;\n\t return false;\n\t};\n\t\n\tfunction generateItemHash(item) {\n\t var message = item.message || '';\n\t var stack = (item.err || {}).stack || String(item.err);\n\t return message + '::' + stack;\n\t}\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n\t *\n\t * @param options - the same options that are accepted by configureGlobal offered as a convenience\n\t */\n\tfunction RateLimiter(options) {\n\t this.startTime = _.now();\n\t this.counter = 0;\n\t this.perMinCounter = 0;\n\t this.platform = null;\n\t this.platformOptions = {};\n\t this.configureGlobal(options);\n\t}\n\t\n\tRateLimiter.globalSettings = {\n\t startTime: _.now(),\n\t maxItems: undefined,\n\t itemsPerMinute: undefined\n\t};\n\t\n\t/*\n\t * configureGlobal - set the global rate limiter options\n\t *\n\t * @param options - Only the following values are recognized:\n\t * startTime: a timestamp of the form returned by (new Date()).getTime()\n\t * maxItems: the maximum items\n\t * itemsPerMinute: the max number of items to send in a given minute\n\t */\n\tRateLimiter.prototype.configureGlobal = function(options) {\n\t if (options.startTime !== undefined) {\n\t RateLimiter.globalSettings.startTime = options.startTime;\n\t }\n\t if (options.maxItems !== undefined) {\n\t RateLimiter.globalSettings.maxItems = options.maxItems;\n\t }\n\t if (options.itemsPerMinute !== undefined) {\n\t RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n\t }\n\t};\n\t\n\t/*\n\t * shouldSend - determine if we should send a given item based on rate limit settings\n\t *\n\t * @param item - the item we are about to send\n\t * @returns An object with the following structure:\n\t * error: (Error|null)\n\t * shouldSend: bool\n\t * payload: (Object|null)\n\t * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n\t * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n\t * describe the situation, but it means that we were already over a rate limit (either globally or\n\t * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n\t * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n\t * place of the passed in item.\n\t */\n\tRateLimiter.prototype.shouldSend = function(item, now) {\n\t now = now || _.now();\n\t var elapsedTime = now - this.startTime;\n\t if (elapsedTime < 0 || elapsedTime >= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar merge = __webpack_require__(6);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(7);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t // Detect both Error and Firefox Exception type\n\t return isType(e, 'error') || isType(e, 'exception');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t var same = true;\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t same = same && result[k] === obj[k];\n\t }\n\t\n\t return (keys.length != 0 && !same) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t if (!baseUrlParts) {\n\t return '(unknown)';\n\t }\n\t\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t return undefined;\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t\n\t for (var i = 0, l = o.key.length; i < l; ++i) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t case 'exception': // Firefox Exception type\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = merge(custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\tvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\n\tvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\t\n\tfunction arrayIncludes(arr, val) {\n\t for (var k = 0; k < arr.length; ++k) {\n\t if (arr[k] === val) {\n\t return true;\n\t }\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction createTelemetryEvent(args) {\n\t var type, metadata, level;\n\t var arg;\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'string':\n\t if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n\t type = arg;\n\t } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n\t level = arg;\n\t }\n\t break;\n\t case 'object':\n\t metadata = arg;\n\t break;\n\t default:\n\t break;\n\t }\n\t }\n\t var event = {\n\t type: type || 'manual',\n\t metadata: metadata || {},\n\t level: level\n\t };\n\t\n\t return event;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len - 1; ++i) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart) {\n\t return paramPart + redact();\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact();\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; ++i) {\n\t arg = args[i];\n\t switch (typeName(arg)) {\n\t case 'object':\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500) {\n\t arg = arg.substr(0, 497) + '...';\n\t }\n\t break;\n\t case 'null':\n\t arg = 'null';\n\t break;\n\t case 'undefined':\n\t arg = 'undefined';\n\t break;\n\t case 'symbol':\n\t arg = arg.toString();\n\t break;\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tfunction filterIp(requestData, captureIp) {\n\t if (!requestData || !requestData['user_ip'] || captureIp === true) {\n\t return;\n\t }\n\t var newIp = requestData['user_ip'];\n\t if (!captureIp) {\n\t newIp = null;\n\t } else {\n\t try {\n\t var parts;\n\t if (newIp.indexOf('.') !== -1) {\n\t parts = newIp.split('.');\n\t parts.pop();\n\t parts.push('0');\n\t newIp = parts.join('.');\n\t } else if (newIp.indexOf(':') !== -1) {\n\t parts = newIp.split(':');\n\t if (parts.length > 2) {\n\t var beginning = parts.slice(0, 3);\n\t var slashIdx = beginning[2].indexOf('/');\n\t if (slashIdx !== -1) {\n\t beginning[2] = beginning[2].substring(0, slashIdx);\n\t }\n\t var terminal = '0000:0000:0000:0000:0000';\n\t newIp = beginning.concat(terminal).join(':');\n\t }\n\t } else {\n\t newIp = null;\n\t }\n\t } catch (e) {\n\t newIp = null;\n\t }\n\t }\n\t requestData['user_ip'] = newIp;\n\t}\n\t\n\tfunction handleOptions(current, input, payload) {\n\t var result = merge(current, input, payload);\n\t if (!input || input.overwriteScrubFields) {\n\t return result;\n\t }\n\t if (input.scrubFields) {\n\t result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t createItem: createItem,\n\t createTelemetryEvent: createTelemetryEvent,\n\t filterIp: filterIp,\n\t formatArgsAsString: formatArgsAsString,\n\t formatUrl: formatUrl,\n\t get: get,\n\t handleOptions: handleOptions,\n\t isError: isError,\n\t isFunction: isFunction,\n\t isIterable: isIterable,\n\t isNativeFunction: isNativeFunction,\n\t isType: isType,\n\t jsonParse: jsonParse,\n\t LEVELS: LEVELS,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t merge: merge,\n\t now: now,\n\t redact: redact,\n\t sanitizeUrl: sanitizeUrl,\n\t scrub: scrub,\n\t set: set,\n\t stringify: stringify,\n\t traverse: traverse,\n\t typeName: typeName,\n\t uuid4: uuid4\n\t};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tfunction merge() {\n\t var i, src, copy, clone, name,\n\t result = {},\n\t current = null,\n\t length = arguments.length;\n\t\n\t for (i=0; i < length; i++) {\n\t current = arguments[i];\n\t if (current == null) {\n\t continue;\n\t }\n\t\n\t for (name in current) {\n\t src = result[name];\n\t copy = current[name];\n\t if (result !== copy) {\n\t if (copy && isPlainObject(copy)) {\n\t clone = src && isPlainObject(src) ? src : {};\n\t result[name] = merge(clone, copy);\n\t } else if (typeof copy !== 'undefined') {\n\t result[name] = copy;\n\t }\n\t }\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = merge;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.merge(options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t var events = Array.prototype.slice.call(this.queue, 0);\n\t if (_.isFunction(this.options.filterTelemetry)) {\n\t try {\n\t var i = events.length;\n\t while (i--) {\n\t if (this.options.filterTelemetry(events[i])) {\n\t events.splice(i, 1);\n\t }\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t }\n\t return events;\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (exc) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n\t return this.capture(type, metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar helpers = __webpack_require__(12);\n\tvar truncation = __webpack_require__(13);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.buildJsonPayload = function(data, callback) {\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t if (callback) {\n\t callback(stringifyResult.error);\n\t }\n\t return null;\n\t }\n\t\n\t return stringifyResult.value;\n\t};\n\t\n\t/**\n\t *\n\t * @param jsonPayload\n\t * @param callback\n\t */\n\tApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.merge(oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction raw(payload, jsonBackup) {\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction selectFrames(frames, range) {\n\t var len = frames.length;\n\t if (len > range * 2) {\n\t return frames.slice(0, range).concat(frames.slice(len - range));\n\t }\n\t return frames;\n\t}\n\t\n\tfunction truncateFrames(payload, jsonBackup, range) {\n\t range = (typeof range === 'undefined') ? 30 : range;\n\t var body = payload.data.body;\n\t var frames;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t frames = chain[i].frames;\n\t frames = selectFrames(frames, range);\n\t chain[i].frames = frames;\n\t }\n\t } else if (body.trace) {\n\t frames = body.trace.frames;\n\t frames = selectFrames(frames, range);\n\t body.trace.frames = frames;\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction maybeTruncateValue(len, val) {\n\t if (!val) {\n\t return val;\n\t }\n\t if (val.length > len) {\n\t return val.slice(0, len - 3).concat('...');\n\t }\n\t return val;\n\t}\n\t\n\tfunction truncateStrings(len, payload, jsonBackup) {\n\t function truncator(k, v, seen) {\n\t switch (_.typeName(v)) {\n\t case 'string':\n\t return maybeTruncateValue(len, v);\n\t case 'object':\n\t case 'array':\n\t return _.traverse(v, truncator, seen);\n\t default:\n\t return v;\n\t }\n\t }\n\t payload = _.traverse(payload, truncator, []);\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction truncateTraceData(traceData) {\n\t if (traceData.exception) {\n\t delete traceData.exception.description;\n\t traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n\t }\n\t traceData.frames = selectFrames(traceData.frames, 1);\n\t return traceData;\n\t}\n\t\n\tfunction minBody(payload, jsonBackup) {\n\t var body = payload.data.body;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t chain[i] = truncateTraceData(chain[i]);\n\t }\n\t } else if (body.trace) {\n\t body.trace = truncateTraceData(body.trace);\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction needsTruncation(payload, maxSize) {\n\t return payload.length > maxSize;\n\t}\n\t\n\tfunction truncate(payload, jsonBackup, maxSize) {\n\t maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n\t var strategies = [\n\t raw,\n\t truncateFrames,\n\t truncateStrings.bind(null, 1024),\n\t truncateStrings.bind(null, 512),\n\t truncateStrings.bind(null, 256),\n\t minBody\n\t ];\n\t var strategy, results, result;\n\t\n\t while ((strategy = strategies.shift())) {\n\t results = strategy(payload, jsonBackup);\n\t payload = results[0];\n\t result = results[1];\n\t if (result.error || !needsTruncation(result.value, maxSize)) {\n\t return result;\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t truncate: truncate,\n\t\n\t /* for testing */\n\t raw: raw,\n\t truncateFrames: truncateFrames,\n\t truncateStrings: truncateStrings,\n\t maybeTruncateValue: maybeTruncateValue\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(15);\n\tvar detection = __webpack_require__(16);\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror) {\n\t oldOnError = window.onerror;\n\t while (oldOnError._rollbarOldOnError) {\n\t oldOnError = oldOnError._rollbarOldOnError;\n\t }\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t if (shim) {\n\t fn._rollbarOldOnError = oldOnError;\n\t }\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t // Ignore\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/*global XDomainRequest*/\n\t\n\tvar _ = __webpack_require__(5);\n\tvar truncation = __webpack_require__(13);\n\tvar logger = __webpack_require__(14);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n\t}\n\t\n\t// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n\t// so Angular change detection isn't triggered on each API call.\n\t// This is the equivalent of runOutsideAngular().\n\t//\n\tfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\t\n\t if (currentZone && currentZone._name === 'angular') {\n\t var rootZone = currentZone._parent;\n\t rootZone.run(function () {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t });\n\t } else {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t }\n\t}\n\t\n\t/* global RollbarProxy */\n\tfunction _proxyRequest(json, callback) {\n\t var rollbarProxy = new RollbarProxy();\n\t rollbarProxy.sendJsonPayload(\n\t json,\n\t function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n\t function(err) {\n\t callback(new Error(err));\n\t }\n\t );\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t if (typeof RollbarProxy !== 'undefined') {\n\t return _proxyRequest(data, callback);\n\t }\n\t\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post,\n\t postJsonPayload: postJsonPayload\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar errorParser = __webpack_require__(21);\n\tvar logger = __webpack_require__(14);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e) {\n\t logger.error('Error while parsing the error object.', e);\n\t try {\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t } catch (e2) {\n\t item.message = String(item.err) || String(e2);\n\t }\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.merge(item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t var remoteString = '$remote_ip';\n\t if (!options.captureIp) {\n\t remoteString = null;\n\t } else if (options.captureIp !== true) {\n\t remoteString += '_anonymize';\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: remoteString\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.merge(custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (options.sendFrameUrl) {\n\t frame.url = stackFrame.url;\n\t }\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.merge(custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(22);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext();\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t var name = exception.constructor && exception.constructor.name;\n\t if (!name || !name.length || name.length < 3) {\n\t name = exception.name;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(23)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.merge(item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.merge(extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.merge(item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data, item);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar urlparser = __webpack_require__(19);\n\tvar domUtil = __webpack_require__(28);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction nameFromDescription(description) {\n\t if (!description || !description.attributes) { return null; }\n\t var attrs = description.attributes;\n\t for (var a = 0; a < attrs.length; ++a) {\n\t if (attrs[a].key === 'name') {\n\t return attrs[a].value;\n\t }\n\t }\n\t return null;\n\t}\n\t\n\tfunction defaultValueScrubber(scrubFields) {\n\t var patterns = [];\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t patterns.push(new RegExp(scrubFields[i], 'i'));\n\t }\n\t return function(description) {\n\t var name = nameFromDescription(description);\n\t if (!name) { return false; }\n\t for (var i = 0; i < patterns.length; ++i) {\n\t if (patterns[i].test(name)) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t };\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.merge(this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState < 2) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t }\n\t if (xhr.readyState > 3) {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber) {\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t } else if (this.defaultValueScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// rollbar.noconflict.umd.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 061f134eb57b41e0c7d9","'use strict';\n\nvar rollbar = require('../rollbar');\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.noconflict.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 14\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 15\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 18\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 20\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 22\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 27\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 28\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/rollbar.snippet.js b/dist/rollbar.snippet.js index 0ecc9dbd7..275209c85 100644 --- a/dist/rollbar.snippet.js +++ b/dist/rollbar.snippet.js @@ -1 +1 @@ -!function(r){function o(n){if(e[n])return e[n].exports;var t=e[n]={exports:{},id:n,loaded:!1};return r[n].call(t.exports,t,t.exports,o),t.loaded=!0,t.exports}var e={};return o.m=r,o.c=e,o.p="",o(0)}([function(r,o,e){"use strict";var n=e(1),t=e(4);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdnjs.cloudflare.com/ajax/libs/rollbar.js/2.6.0/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,o,e){"use strict";function n(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}function t(r,o){this.options=r,this._rollbarOldOnError=null;var e=s++;this.shimId=function(){return e},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[e]={handler:o,messages:[]})}function a(r,o){if(r){var e=o.globalAlias||"Rollbar";if("object"==typeof r[e])return r[e];r._rollbarShims={},r._rollbarWrappedError=null;var t=new p(o);return n(function(){o.captureUncaught&&(t._rollbarOldOnError=r.onerror,i.captureUncaughtExceptions(r,t,!0),i.wrapGlobals(r,t,!0)),o.captureUnhandledRejections&&i.captureUnhandledRejections(r,t,!0);var n=o.autoInstrument;return o.enabled!==!1&&(void 0===n||n===!0||"object"==typeof n&&n.network)&&r.addEventListener&&(r.addEventListener("load",t.captureLoad.bind(t)),r.addEventListener("DOMContentLoaded",t.captureDomContentLoaded.bind(t))),r[e]=t,t})()}}function l(r){return n(function(){var o=this,e=Array.prototype.slice.call(arguments,0),n={shim:o,method:r,args:e,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)})}var i=e(2),s=0,d=e(3),c=function(r,o){return new t(r,o)},p=function(r){return new d(c,r)};t.prototype.loadFull=function(r,o,e,t,a){var l=function(){var o;if(void 0===r._rollbarDidLoad){o=new Error("rollbar.js did not load");for(var e,n,t,l,i=0;e=r._rollbarShims[i++];)for(e=e.messages||[];n=e.shift();)for(t=n.args||[],i=0;i= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 14\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 15\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 18\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 20\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 22\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 27\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 28\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 3fd1ade2d0e0b4714dab","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/utility.js","webpack:///./src/merge.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/queue.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/truncation.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACtCA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;;;;;;;ACvBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,2BAA0B,sBAAsB;AAChD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3bA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA6B;AAC7B;AACA;;AAEA;;;;;;;AC3JA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChJA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,gBAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA,0BAAyB;AACzB;AACA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oCAAmC,OAAO;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;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,oDAAmD,SAAS;AAC5D;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,mCAAkC,OAAO;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,SAAS,UAAU,YAAY,GAAG;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,aAAa;AAChC;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,qBAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACztBA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;;AAEA,YAAW,YAAY;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0CAAyC,iBAAiB;AAC1D,+BAA8B,kBAAkB;;AAEhD,0CAAyC,iBAAiB;AAC1D,uCAAsC,6BAA6B;;AAEnE;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yBAAwB;AACxB,gDAA+C,EAAE;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;;AAGA;;AAEA;;AAEA,WAAU;AACV,WAAU;AACV,WAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA,sBAAqB,YAAY;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAe;AACf;AACA,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAmB,WAAW;AAC9B;AACA;;AAEA;;AAEA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAsB,UAAU;AAChC;AACA;;;AAGA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,qBAAoB;AACpB,eAAc;AACd,iBAAgB;AAChB,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAU;AACV;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT,WAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,yBAAwB,YAAY;AACpC;AACA;AACA,YAAW;AACX;AACA,yBAAwB,gDAAgD;AACxE;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA,YAAW;AACX;AACA,yBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,uCAAsC,EAAE;AACxC;AACA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA,gDAA+C,yGAAyG,EAAE;;AAE1J;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE,UAAU;AACvB;AACA;AACA,MAAK;AACL;AACA;;AAEA;;;;;;;AC1vBA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yDAAwD,WAAW;AACnE;AACA;AACA,gBAAe,WAAW;AAC1B,gBAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAa,8BAA8B;AAC3C;AACA;AACA;AACA;AACA,gDAA+C,SAAS;AACxD;AACA;AACA,eAAc;AACd;AACA;AACA,WAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB,+BAA+B;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACvHA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,mBAAmB;AACxD;;AAEA;AACA,sCAAqC,4BAA4B;AACjE;AACA;AACA,+BAA8B,4BAA4B;AAC1D;AACA;AACA;AACA,sCAAqC,gBAAgB;AACrD;AACA;AACA,+BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA,+BAA8B,aAAa;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClLA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACjGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzFA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB;AACrC;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtHA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AClBD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAgB,QAAQ;AACxB;AACA;AACA;AACA,cAAa,oBAAoB;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AChIA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,kBAAkB;AAC/B;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC7PA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChFA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,OAAO;AAC7C;AACA,qBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAA4B,gBAAgB;AAC5C;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+BAA8B,aAAa;AAC3C;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACjQA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA,oBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC3GA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,4BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA,gDAA+C,SAAS;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,EAAC;;;;;;;;AC/LD;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;;AAET;AACA,4DAA2D,UAAU;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;AC1GD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC,sBAAsB;AAC1D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACbA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe,iBAAiB;AAChC;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChKA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iDAAgD,aAAa;AAC7D;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA,iBAAgB,cAAc;AAC9B,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;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,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;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,gCAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,8BAA6B,0BAA0B;AACvD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrlBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,4BAA4B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,uBAAuB;AACpC;AACA;AACA;AACA,4BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"rollbar.umd.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[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 3fd1ade2d0e0b4714dab","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 14\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 15\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 18\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 20\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 22\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 27\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 28\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/rollbar.umd.min.js b/dist/rollbar.umd.min.js index 07d577844..9b8c970ec 100644 --- a/dist/rollbar.umd.min.js +++ b/dist/rollbar.umd.min.js @@ -1,4 +1,4 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.rollbar=e():t.rollbar=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){t.exports=r(1)},function(t,e,r){"use strict";var n=r(2),o="undefined"!=typeof window&&window._rollbarConfig,i=o&&o.globalAlias||"Rollbar",a="undefined"!=typeof window&&window[i]&&"function"==typeof window[i].shimId&&void 0!==window[i].shimId();if("undefined"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),!a&&o){var s=new n(o);window[i]=s}else"undefined"!=typeof window?(window.rollbar=n,window._rollbarDidLoad=!0):"undefined"!=typeof self&&(self.rollbar=n,self._rollbarDidLoad=!0);t.exports=n},function(t,e,r){"use strict";function n(t,e){this.options=c.handleOptions(x,t);var r=new l(this.options,h,d);this.client=e||new u(this.options,r,p,"browser");var n="undefined"!=typeof window&&window||"undefined"!=typeof self&&self,o="undefined"!=typeof document&&document;i(this.client.notifier,n),a(this.client.queue),(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(f.captureUncaughtExceptions(n,this),f.wrapGlobals(n,this)),(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&f.captureUnhandledRejections(n,this),this.instrumenter=new w(this.options,this.client.telemeter,this,n,o),this.instrumenter.instrument()}function o(t){var e="Rollbar is not initialized";p.error(e),t&&t(new Error(e))}function i(t,e){t.addTransform(m.handleItemWithError).addTransform(m.ensureItemHasSomethingToSay).addTransform(m.addBaseInfo).addTransform(m.addRequestInfo(e)).addTransform(m.addClientInfo(e)).addTransform(m.addPluginInfo(e)).addTransform(m.addBody).addTransform(g.addMessageWithError).addTransform(g.addTelemetryData).addTransform(g.addConfigToPayload).addTransform(m.scrubPayload).addTransform(g.userTransform(p)).addTransform(g.itemToPayload)}function a(t){t.addPredicate(y.checkLevel).addPredicate(v.checkIgnore).addPredicate(y.userCheckIgnore(p)).addPredicate(y.urlIsNotBlacklisted(p)).addPredicate(y.urlIsWhitelisted(p)).addPredicate(y.messageIsIgnored(p))}function s(t){for(var e=0,r=t.length;e=1&&r>e}function i(t,e,r,n,o,i,s){var u=null;return r&&(r=new Error(r)),r||n||(u=a(t,e,o,i,s)),{error:r,shouldSend:n,payload:u}}function a(t,e,r,n,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:r,itemsPerMinute:n}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}var s=r(5);n.globalSettings={startTime:s.now(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||s.now();var r=e-this.startTime;(r<0||r>=6e4)&&(this.startTime=e,this.perMinCounter=0);var a=n.globalSettings.maxItems,u=n.globalSettings.itemsPerMinute;if(o(t,a,this.counter))return i(this.platform,this.platformOptions,a+" max items reached",!1);if(o(t,u,this.perMinCounter))return i(this.platform,this.platformOptions,u+" items per minute reached",!1);this.counter++,this.perMinCounter++;var c=!o(t,a,this.counter),l=c;return c=c&&!o(t,u,this.perMinCounter),i(this.platform,this.platformOptions,null,c,a,u,l)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,r){"use strict";function n(){if(!q&&(q=!0,c(JSON)&&(s(JSON.stringify)&&(F.stringify=JSON.stringify),s(JSON.parse)&&(F.parse=JSON.parse)),!a(F.stringify)||!a(F.parse))){var t=r(7);t(F)}}function o(t,e){return e===i(t)}function i(t){var e=typeof t;return"object"!==e?e:t?t instanceof Error?"error":{}.toString.call(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase():"null"}function a(t){return o(t,"function")}function s(t){var e=/[\\^$.*+?()[\]{}|]/g,r=Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?"),n=RegExp("^"+r+"$");return u(t)&&n.test(t)}function u(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function c(t){return!o(t,"undefined")}function l(t){var e=i(t);return"object"===e||"array"===e}function p(t){return o(t,"error")||o(t,"exception")}function f(t,e,r){var n,i,a,s=o(t,"object"),u=o(t,"array"),c=[];if(s&&r.indexOf(t)!==-1)return t;if(r.push(t),s)for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&c.push(n);else if(u)for(a=0;as)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var r=e+"//"+t.hostname;return t.port&&(r=r+":"+t.port),t.path&&(r+=t.path),r}function b(t,e){var r,n;try{r=F.stringify(t)}catch(o){if(e&&a(e))try{r=e(t)}catch(t){n=t}else n=o}return{error:n,value:r}}function w(t){var e,r;try{e=F.parse(t)}catch(t){r=t}return{error:r,value:e}}function _(t,e,r,n,o,i,a,s){var u={url:e||"",line:r,column:n};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(r,n){try{e(r,n)}catch(e){t.error(e)}}}function k(t,e,r,n,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=A(u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:P(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),n&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){for(var r=0;r500&&(n=n.substr(0,497)+"...");break;case"null":n="null";break;case"undefined":n="undefined";break;case"symbol":n=n.toString()}o.push(n)}return o.join(" ")}function P(){return Date.now?+Date.now():+new Date}function j(t,e){if(t&&t.user_ip&&e!==!0){var r=t.user_ip;if(e)try{var n;if(r.indexOf(".")!==-1)n=r.split("."),n.pop(),n.push("0"),r=n.join(".");else if(r.indexOf(":")!==-1){if(n=r.split(":"),n.length>2){var o=n.slice(0,3),i=o[2].indexOf("/");i!==-1&&(o[2]=o[2].substring(0,i));var a="0000:0000:0000:0000:0000";r=o.concat(a).join(":")}}else r=null}catch(t){r=null}else r=null;t.user_ip=r}}function R(t,e,r){var n=A(t,e,r);return!e||e.overwriteScrubFields?n:(e.scrubFields&&(n.scrubFields=(t.scrubFields||[]).concat(e.scrubFields)),n)}var A=r(6),F={},q=!1;n();var D={debug:0,info:1,warning:2,error:3,critical:4},M={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},U=["log","network","dom","navigation","error","manual"],H=["critical","error","warning","info","debug"];t.exports={addParamsAndAccessTokenToPath:v,createItem:k,createTelemetryEvent:I,filterIp:j,formatArgsAsString:C,formatUrl:y,get:T,handleOptions:R,isError:p,isFunction:a,isIterable:l,isNativeFunction:s,isType:o,jsonParse:w,LEVELS:D,makeUnhandledStackInfo:_,merge:A,now:P,redact:h,sanitizeUrl:m,scrub:O,set:S,stringify:b,traverse:f,typeName:i,uuid4:d}},function(t,e){"use strict";function r(){var t,e,n,o,a,s={},u=null,c=arguments.length;for(t=0;tn&&(o=this.maxQueueSize-n),this.maxQueueSize=n,this.queue.splice(0,o)},n.prototype.copyEvents=function(){var t=Array.prototype.slice.call(this.queue,0);if(i.isFunction(this.options.filterTelemetry))try{for(var e=t.length;e--;)this.options.filterTelemetry(t[e])&&t.splice(e,1)}catch(t){this.options.filterTelemetry=null}return t},n.prototype.capture=function(t,e,r,n,a){var s={level:o(t,r),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};n&&(s.uuid=n);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},n.prototype.captureEvent=function(t,e,r,n){return this.capture(t,e,r,n)},n.prototype.captureError=function(t,e,r,n){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,r,n)},n.prototype.captureLog=function(t,e,r,n){return this.capture("log",{message:t},e,r,n)},n.prototype.captureNetwork=function(t,e,r,n){e=e||"xhr",t.subtype=t.subtype||e,n&&(t.request=n);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,r)},n.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},n.prototype.captureDom=function(t,e,r,n,o){var i={subtype:t,element:e};return void 0!==r&&(i.value=r),void 0!==n&&(i.checked=n),this.capture("dom",i,"info",o)},n.prototype.captureNavigation=function(t,e,r){return this.capture("navigation",{from:t,to:e},"info",r)},n.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},n.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},n.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},n.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},n.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=n},function(t,e,r){"use strict";function n(t,e,r,n){this.options=t,this.transport=e,this.url=r,this.jsonBackup=n,this.accessToken=t.accessToken,this.transportOptions=o(t,r)}function o(t,e){return a.getTransportFromOptions(t,u,e)}var i=r(5),a=r(12),s=r(13),u={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};n.prototype.postItem=function(t,e){var r=a.transportOptions(this.transportOptions,"POST"),n=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,r,n,e)},n.prototype.buildJsonPayload=function(t,e){var r=a.buildPayload(this.accessToken,t,this.jsonBackup),n=s.truncate(r);return n.error?(e&&e(n.error),null):n.value},n.prototype.postJsonPayload=function(t,e){var r=a.transportOptions(this.transportOptions,"POST");this.transport.postJsonPayload(this.accessToken,r,t,e)},n.prototype.configure=function(t){var e=this.oldOptions; +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.rollbar=e():t.rollbar=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){t.exports=r(1)},function(t,e,r){"use strict";var n=r(2),o="undefined"!=typeof window&&window._rollbarConfig,i=o&&o.globalAlias||"Rollbar",a="undefined"!=typeof window&&window[i]&&"function"==typeof window[i].shimId&&void 0!==window[i].shimId();if("undefined"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),!a&&o){var s=new n(o);window[i]=s}else"undefined"!=typeof window?(window.rollbar=n,window._rollbarDidLoad=!0):"undefined"!=typeof self&&(self.rollbar=n,self._rollbarDidLoad=!0);t.exports=n},function(t,e,r){"use strict";function n(t,e){this.options=c.handleOptions(x,t);var r=new l(this.options,h,d);this.client=e||new u(this.options,r,p,"browser");var n="undefined"!=typeof window&&window||"undefined"!=typeof self&&self,o="undefined"!=typeof document&&document;i(this.client.notifier,n),a(this.client.queue),(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(f.captureUncaughtExceptions(n,this),f.wrapGlobals(n,this)),(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&f.captureUnhandledRejections(n,this),this.instrumenter=new w(this.options,this.client.telemeter,this,n,o),this.instrumenter.instrument()}function o(t){var e="Rollbar is not initialized";p.error(e),t&&t(new Error(e))}function i(t,e){t.addTransform(m.handleItemWithError).addTransform(m.ensureItemHasSomethingToSay).addTransform(m.addBaseInfo).addTransform(m.addRequestInfo(e)).addTransform(m.addClientInfo(e)).addTransform(m.addPluginInfo(e)).addTransform(m.addBody).addTransform(g.addMessageWithError).addTransform(g.addTelemetryData).addTransform(g.addConfigToPayload).addTransform(m.scrubPayload).addTransform(g.userTransform(p)).addTransform(g.itemToPayload)}function a(t){t.addPredicate(y.checkLevel).addPredicate(v.checkIgnore).addPredicate(y.userCheckIgnore(p)).addPredicate(y.urlIsNotBlacklisted(p)).addPredicate(y.urlIsWhitelisted(p)).addPredicate(y.messageIsIgnored(p))}function s(t){for(var e=0,r=t.length;e=1&&r>e}function i(t,e,r,n,o,i,s){var u=null;return r&&(r=new Error(r)),r||n||(u=a(t,e,o,i,s)),{error:r,shouldSend:n,payload:u}}function a(t,e,r,n,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:r,itemsPerMinute:n}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}var s=r(5);n.globalSettings={startTime:s.now(),maxItems:void 0,itemsPerMinute:void 0},n.prototype.configureGlobal=function(t){void 0!==t.startTime&&(n.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(n.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(n.globalSettings.itemsPerMinute=t.itemsPerMinute)},n.prototype.shouldSend=function(t,e){e=e||s.now();var r=e-this.startTime;(r<0||r>=6e4)&&(this.startTime=e,this.perMinCounter=0);var a=n.globalSettings.maxItems,u=n.globalSettings.itemsPerMinute;if(o(t,a,this.counter))return i(this.platform,this.platformOptions,a+" max items reached",!1);if(o(t,u,this.perMinCounter))return i(this.platform,this.platformOptions,u+" items per minute reached",!1);this.counter++,this.perMinCounter++;var c=!o(t,a,this.counter),l=c;return c=c&&!o(t,u,this.perMinCounter),i(this.platform,this.platformOptions,null,c,a,u,l)},n.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=n},function(t,e,r){"use strict";function n(){if(!q&&(q=!0,c(JSON)&&(s(JSON.stringify)&&(F.stringify=JSON.stringify),s(JSON.parse)&&(F.parse=JSON.parse)),!a(F.stringify)||!a(F.parse))){var t=r(7);t(F)}}function o(t,e){return e===i(t)}function i(t){var e=typeof t;return"object"!==e?e:t?t instanceof Error?"error":{}.toString.call(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase():"null"}function a(t){return o(t,"function")}function s(t){var e=/[\\^$.*+?()[\]{}|]/g,r=Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?"),n=RegExp("^"+r+"$");return u(t)&&n.test(t)}function u(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function c(t){return!o(t,"undefined")}function l(t){var e=i(t);return"object"===e||"array"===e}function p(t){return o(t,"error")||o(t,"exception")}function f(t,e,r){var n,i,a,s=o(t,"object"),u=o(t,"array"),c=[];if(s&&r.indexOf(t)!==-1)return t;if(r.push(t),s)for(n in t)Object.prototype.hasOwnProperty.call(t,n)&&c.push(n);else if(u)for(a=0;as)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var r=e+"//"+t.hostname;return t.port&&(r=r+":"+t.port),t.path&&(r+=t.path),r}function b(t,e){var r,n;try{r=F.stringify(t)}catch(o){if(e&&a(e))try{r=e(t)}catch(t){n=t}else n=o}return{error:n,value:r}}function w(t){var e,r;try{e=F.parse(t)}catch(t){r=t}return{error:r,value:e}}function _(t,e,r,n,o,i,a,s){var u={url:e||"",line:r,column:n};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(r,n){try{e(r,n)}catch(e){t.error(e)}}}function k(t,e,r,n,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=A(u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:P(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),n&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){for(var r=0;r500&&(n=n.substr(0,497)+"...");break;case"null":n="null";break;case"undefined":n="undefined";break;case"symbol":n=n.toString()}o.push(n)}return o.join(" ")}function P(){return Date.now?+Date.now():+new Date}function j(t,e){if(t&&t.user_ip&&e!==!0){var r=t.user_ip;if(e)try{var n;if(r.indexOf(".")!==-1)n=r.split("."),n.pop(),n.push("0"),r=n.join(".");else if(r.indexOf(":")!==-1){if(n=r.split(":"),n.length>2){var o=n.slice(0,3),i=o[2].indexOf("/");i!==-1&&(o[2]=o[2].substring(0,i));var a="0000:0000:0000:0000:0000";r=o.concat(a).join(":")}}else r=null}catch(t){r=null}else r=null;t.user_ip=r}}function R(t,e,r){var n=A(t,e,r);return!e||e.overwriteScrubFields?n:(e.scrubFields&&(n.scrubFields=(t.scrubFields||[]).concat(e.scrubFields)),n)}var A=r(6),F={},q=!1;n();var D={debug:0,info:1,warning:2,error:3,critical:4},M={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},U=["log","network","dom","navigation","error","manual"],H=["critical","error","warning","info","debug"];t.exports={addParamsAndAccessTokenToPath:v,createItem:k,createTelemetryEvent:I,filterIp:j,formatArgsAsString:C,formatUrl:y,get:T,handleOptions:R,isError:p,isFunction:a,isIterable:l,isNativeFunction:s,isType:o,jsonParse:w,LEVELS:D,makeUnhandledStackInfo:_,merge:A,now:P,redact:h,sanitizeUrl:m,scrub:O,set:S,stringify:b,traverse:f,typeName:i,uuid4:d}},function(t,e){"use strict";function r(){var t,e,n,o,a,s={},u=null,c=arguments.length;for(t=0;tn&&(o=this.maxQueueSize-n),this.maxQueueSize=n,this.queue.splice(0,o)},n.prototype.copyEvents=function(){var t=Array.prototype.slice.call(this.queue,0);if(i.isFunction(this.options.filterTelemetry))try{for(var e=t.length;e--;)this.options.filterTelemetry(t[e])&&t.splice(e,1)}catch(t){this.options.filterTelemetry=null}return t},n.prototype.capture=function(t,e,r,n,a){var s={level:o(t,r),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};n&&(s.uuid=n);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},n.prototype.captureEvent=function(t,e,r,n){return this.capture(t,e,r,n)},n.prototype.captureError=function(t,e,r,n){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,r,n)},n.prototype.captureLog=function(t,e,r,n){return this.capture("log",{message:t},e,r,n)},n.prototype.captureNetwork=function(t,e,r,n){e=e||"xhr",t.subtype=t.subtype||e,n&&(t.request=n);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,r)},n.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},n.prototype.captureDom=function(t,e,r,n,o){var i={subtype:t,element:e};return void 0!==r&&(i.value=r),void 0!==n&&(i.checked=n),this.capture("dom",i,"info",o)},n.prototype.captureNavigation=function(t,e,r){return this.capture("navigation",{from:t,to:e},"info",r)},n.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},n.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},n.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},n.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},n.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=n},function(t,e,r){"use strict";function n(t,e,r,n){this.options=t,this.transport=e,this.url=r,this.jsonBackup=n,this.accessToken=t.accessToken,this.transportOptions=o(t,r)}function o(t,e){return a.getTransportFromOptions(t,u,e)}var i=r(5),a=r(12),s=r(13),u={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};n.prototype.postItem=function(t,e){var r=a.transportOptions(this.transportOptions,"POST"),n=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,r,n,e)},n.prototype.buildJsonPayload=function(t,e){var r=a.buildPayload(this.accessToken,t,this.jsonBackup),n=s.truncate(r);return n.error?(e&&e(n.error),null):n.value},n.prototype.postJsonPayload=function(t,e){var r=a.transportOptions(this.transportOptions,"POST");this.transport.postJsonPayload(this.accessToken,r,t,e)},n.prototype.configure=function(t){var e=this.oldOptions; return this.options=i.merge(e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=n},function(t,e,r){"use strict";function n(t,e,r){if(!s.isType(e.context,"string")){var n=s.stringify(e.context,r);n.error?e.context="Error: could not serialize 'context'":e.context=n.value||"",e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}}function o(t,e,r){var n=e.hostname,o=e.protocol,i=e.port,a=e.path,s=e.search,u=t.proxy;if(t.endpoint){var c=r.parse(t.endpoint);n=c.hostname,o=c.protocol,i=c.port,a=c.pathname,s=c.search}return{hostname:n,protocol:o,port:i,path:a,search:s,proxy:u}}function i(t,e){var r=t.protocol||"https:",n=t.port||("http:"===r?80:"https:"===r?443:void 0),o=t.hostname,i=t.path;return t.search&&(i+=t.search),t.proxy&&(i=r+"//"+o+i,o=t.proxy.host||t.proxy.hostname,n=t.proxy.port,r=t.proxy.protocol||r),{protocol:r,hostname:o,path:i,port:n,method:e}}function a(t,e){var r=/\/$/.test(t),n=/^\//.test(e);return r&&n?e=e.substring(1):r||n||(e="/"+e),t+e}var s=r(5);t.exports={buildPayload:n,getTransportFromOptions:o,transportOptions:i,appendPathToPath:a}},function(t,e,r){"use strict";function n(t,e){return[t,f.stringify(t,e)]}function o(t,e){var r=t.length;return r>2*e?t.slice(0,e).concat(t.slice(r-e)):t}function i(t,e,r){r="undefined"==typeof r?30:r;var n,i=t.data.body;if(i.trace_chain)for(var a=i.trace_chain,s=0;st?e.slice(0,t-3).concat("..."):e}function s(t,e,r){function n(e,r,o){switch(f.typeName(r)){case"string":return a(t,r);case"object":case"array":return f.traverse(r,n,o);default:return r}}return e=f.traverse(e,n,[]),[e,f.stringify(e,r)]}function u(t){return t.exception&&(delete t.exception.description,t.exception.message=a(255,t.exception.message)),t.frames=o(t.frames,1),t}function c(t,e){var r=t.data.body;if(r.trace_chain)for(var n=r.trace_chain,o=0;oe}function p(t,e,r){r="undefined"==typeof r?524288:r;for(var o,a,u,p=[n,i,s.bind(null,1024),s.bind(null,512),s.bind(null,256),c];o=p.shift();)if(a=o(t,e),t=a[0],u=a[1],u.error||!l(u.value,r))return u;return u}var f=r(5);t.exports={truncate:p,raw:n,truncateFrames:i,truncateStrings:s,maybeTruncateValue:a}},function(t,e,r){"use strict";function n(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.error(s.formatArgsAsString(t)):console.error.apply(console,t)}function o(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.info(s.formatArgsAsString(t)):console.info.apply(console,t)}function i(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.log(s.formatArgsAsString(t)):console.log.apply(console,t)}r(15);var a=r(16),s=r(5);t.exports={error:n,info:o,log:i}},function(t,e){!function(t){"use strict";t.console||(t.console={});for(var e,r,n=t.console,o=function(){},i=["memory"],a="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");e=i.pop();)n[e]||(n[e]={});for(;r=a.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window)},function(t,e){"use strict";function r(){var t;if(!document)return t;for(var e=3,r=document.createElement("div"),n=r.getElementsByTagName("i");r.innerHTML="",n[0];);return e>4?e:t}var n={ieVersion:r};t.exports=n},function(t,e){"use strict";function r(t,e,r){if(t){var o;if("function"==typeof e._rollbarOldOnError)o=e._rollbarOldOnError;else if(t.onerror){for(o=t.onerror;o._rollbarOldOnError;)o=o._rollbarOldOnError;e._rollbarOldOnError=o}var i=function(){var r=Array.prototype.slice.call(arguments,0);n(t,e,o,r)};r&&(i._rollbarOldOnError=o),t.onerror=i}}function n(t,e,r,n){t._rollbarWrappedError&&(n[4]||(n[4]=t._rollbarWrappedError),n[5]||(n[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null),e.handleUncaughtException.apply(e,n),r&&r.apply(t,n)}function o(t,e,r){if(t){"function"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener("unhandledrejection",t._rollbarURH);var n=function(t){var r,n,o;try{r=t.reason}catch(t){r=void 0}try{n=t.promise}catch(t){n="[unhandledrejection] error getting `promise` from event"}try{o=t.detail,!r&&o&&(r=o.reason,n=o.promise)}catch(t){}r||(r="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(r,n)};n.belongsToShim=r,t._rollbarURH=n,t.addEventListener("unhandledrejection",n)}}function i(t,e,r){if(t){var n,o,i="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(n=0;n=400&&t.status<600}function f(t,e){var r=new Error(t);return r.code=e||"ENOTFOUND",r}var h=r(5),d=r(13),m=r(14);t.exports={get:n,post:o,postJsonPayload:i}},function(t,e){"use strict";function r(t){var e,r,n={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(e=t.indexOf("//"),e!==-1?(n.protocol=t.substring(0,e),r=e+2):r=0,e=t.indexOf("@",r),e!==-1&&(n.auth=t.substring(r,e),r=e+1),e=t.indexOf("/",r),e===-1){if(e=t.indexOf("?",r),e===-1)return e=t.indexOf("#",r),e===-1?n.host=t.substring(r):(n.host=t.substring(r,e),n.hash=t.substring(e)),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),n;n.host=t.substring(r,e),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),r=e}else n.host=t.substring(r,e),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),r=e;if(e=t.indexOf("#",r),e===-1?n.path=t.substring(r):(n.path=t.substring(r,e),n.hash=t.substring(e)),n.path){var o=n.path.split("?");n.pathname=o[0],n.query=o[1],n.search=n.query?"?"+n.query:null}return n}t.exports={parse:r}},function(t,e,r){"use strict";function n(t,e,r){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||d.parse(t.err)}catch(e){m.error("Error while parsing the error object.",e);try{t.message=t.err.message||t.err.description||t.message||String(t.err)}catch(e){t.message=String(t.err)||String(e)}delete t.err}r(null,t)}function o(t,e,r){t.message||t.stackInfo||t.custom||r(new Error("No message, stack info, or custom data"),null),r(null,t)}function i(t,e,r){var n=e.payload&&e.payload.environment||e.environment;t.data=h.merge(t.data,{environment:n,level:t.level,endpoint:e.endpoint,platform:"browser",framework:"browser-js",language:"javascript",server:{},uuid:t.uuid,notifier:{name:"rollbar-browser-js",version:e.version}}),r(null,t)}function a(t){return function(e,r,n){if(!t||!t.location)return n(null,e);var o="$remote_ip";r.captureIp?r.captureIp!==!0&&(o+="_anonymize"):o=null,h.set(e,"data.request",{url:t.location.href,query_string:t.location.search,user_ip:o}),n(null,e)}}function s(t){return function(e,r,n){if(!t)return n(null,e);var o=t.navigator||{},i=t.screen||{};h.set(e,"data.client",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:o.userAgent,language:o.language,cookie_enabled:o.cookieEnabled,screen:{width:i.width,height:i.height}}}),n(null,e)}}function u(t){return function(e,r,n){if(!t||!t.navigator)return n(null,e);for(var o,i=[],a=t.navigator.plugins||[],s=0,u=a.length;s-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),n=this.extractLocation(r.pop()),o=r.join(" ")||void 0,i="eval"===n[0]?void 0:n[0];return new t(o,void 0,i,n[1],n[2],e)},this)},parseFFOrSafari:function(n){var o=r(n.stack.split("\n"),function(t){return!t.match(i)},this);return e(o,function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new t(e);var r=e.split("@"),n=this.extractLocation(r.pop()),o=r.shift()||void 0;return new t(o,void 0,n[0],n[1],n[2],e)},this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf("\n")>-1&&t.message.split("\n").length>t.stacktrace.split("\n").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,n=e.message.split("\n"),o=[],i=2,a=n.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new t(a,s,o[0],o[1],o[2],e)},this)}}})},function(t,e,r){var n,o,i;!function(r,a){"use strict";o=[],n=a,i="function"==typeof n?n.apply(e,o):n,!(void 0!==i&&(t.exports=i))}(this,function(){"use strict";function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t,e,r,n,o,i){void 0!==t&&this.setFunctionName(t),void 0!==e&&this.setArgs(e),void 0!==r&&this.setFileName(r),void 0!==n&&this.setLineNumber(n),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return e.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(t){this.functionName=String(t)},getArgs:function(){return this.args},setArgs:function(t){if("[object Array]"!==Object.prototype.toString.call(t))throw new TypeError("Args must be an Array");this.args=t},getFileName:function(){return this.fileName},setFileName:function(t){this.fileName=String(t)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(e){if(!t(e))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(e)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(e){if(!t(e))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(e)},getSource:function(){return this.source},setSource:function(t){this.source=String(t)},toString:function(){var e=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",n=this.getFileName()?"@"+this.getFileName():"",o=t(this.getLineNumber())?":"+this.getLineNumber():"",i=t(this.getColumnNumber())?":"+this.getColumnNumber():"";return e+r+n+o+i}},e})},function(t,e,r){"use strict";function n(t,e,r){var n=e.payload||{};n.body&&delete n.body;var o=u.merge(t.data,n);t._isUncaught&&(o._isUncaught=!0),t._originalArgs&&(o._originalArgs=t._originalArgs),r(null,o)}function o(t,e,r){t.telemetryEvents&&u.set(t,"data.body.telemetry",t.telemetryEvents),r(null,t)}function i(t,e,r){if(!t.message)return void r(null,t);var n="data.body.trace_chain.0",o=u.get(t,n);if(o||(n="data.body.trace",o=u.get(t,n)),o){if(!o.exception||!o.exception.description)return u.set(t,n+".exception.description",t.message),void r(null,t);var i=u.get(t,n+".extra")||{},a=u.merge(i,{message:t.message});u.set(t,n+".extra",a)}r(null,t)}function a(t){return function(e,r,n){var o=u.merge(e);try{u.isFunction(r.transform)&&r.transform(o.data,e)}catch(o){return r.transform=null,t.error("Error while calling custom transform() function. Removing custom transform().",o),void n(null,e)}n(null,o)}}function s(t,e,r){if(!e.sendConfig)return r(null,t);var n="_rollbarConfig",o=u.get(t,"data.custom")||{};o[n]=e,t.data.custom=o,r(null,t)}var u=r(5);t.exports={itemToPayload:n,addTelemetryData:o,addMessageWithError:i,userTransform:a,addConfigToPayload:s}},function(t,e,r){"use strict";function n(t,e){return!o.get(e,"plugins.jquery.ignoreAjaxErrors")||!o.get(t,"body.message.extra.isAjax")}var o=r(5);t.exports={checkIgnore:n}},function(t,e,r){"use strict";function n(t,e){var r=t.level,n=c.LEVELS[r]||0,o=e.reportLevel,i=c.LEVELS[o]||0;return!(n3){a.__rollbar_xhr.end_time_ms=u.now();var r=null;if(e.autoInstrument.networkResponseHeaders){var n=e.autoInstrument.networkResponseHeaders;r={};try{var i,s;if(n===!0){var c=a.getAllResponseHeaders();if(c){var l,p,f=c.trim().split(/[\r\n]+/);for(s=0;s=0&&t.options[t.selectedIndex]&&this.captureDomEvent("input",t,t.options[t.selectedIndex].value)},s.prototype.captureDomEvent=function(t,e,r,n){if(void 0!==r)if(this.scrubTelemetryInputs||"password"===l.getElementType(e))r="[scrubbed]";else{var o=l.describeElement(e);this.telemetryScrubber?this.telemetryScrubber(o)&&(r="[scrubbed]"):this.defaultValueScrubber(o)&&(r="[scrubbed]")}var i=l.elementArrayToString(l.treeToArray(e));this.telemeter.captureDom(t,i,r,n)},s.prototype.deinstrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,r=!e&&this._window.history&&this._window.history.pushState;r&&o(this.replacements,"navigation")},s.prototype.instrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,r=!e&&this._window.history&&this._window.history.pushState;if(r){var o=this;n(this._window,"onpopstate",function(t){return function(){var e=o._location.href;o.handleUrlChange(o._lastHref,e),t&&t.apply(this,arguments)}},this.replacements,"navigation"),n(this._window.history,"pushState",function(t){return function(){var e=arguments.length>2?arguments[2]:void 0;return e&&o.handleUrlChange(o._lastHref,e+""),t.apply(this,arguments)}},this.replacements,"navigation")}},s.prototype.handleUrlChange=function(t,e){var r=c.parse(this._location.href),n=c.parse(e),o=c.parse(t);this._lastHref=e,r.protocol===n.protocol&&r.host===n.host&&(e=n.path+(n.hash||"")),r.protocol===o.protocol&&r.host===o.host&&(t=o.path+(o.hash||"")),this.telemeter.captureNavigation(t,e)},s.prototype.deinstrumentConnectivity=function(){("addEventListener"in this._window||"body"in this._document)&&(this._window.addEventListener?this.removeListeners("connectivity"):o(this.replacements,"connectivity"))},s.prototype.instrumentConnectivity=function(){if("addEventListener"in this._window||"body"in this._document)if(this._window.addEventListener)this.addListener("connectivity",this._window,"online",void 0,function(){this.telemeter.captureConnectivityChange("online")}.bind(this),!0),this.addListener("connectivity",this._window,"offline",void 0,function(){this.telemeter.captureConnectivityChange("offline")}.bind(this),!0);else{var t=this;n(this._document.body,"ononline",function(e){return function(){t.telemeter.captureConnectivityChange("online"),e&&e.apply(this,arguments)}},this.replacements,"connectivity"),n(this._document.body,"onoffline",function(e){return function(){t.telemeter.captureConnectivityChange("offline"),e&&e.apply(this,arguments)}},this.replacements,"connectivity")}},s.prototype.addListener=function(t,e,r,n,o,i){e.addEventListener?(e.addEventListener(r,o,i),this.eventRemovers[t].push(function(){e.removeEventListener(r,o,i)})):n&&(e.attachEvent(n,o),this.eventRemovers[t].push(function(){e.detachEvent(n,o)}))},s.prototype.removeListeners=function(t){for(var e;this.eventRemovers[t].length;)(e=this.eventRemovers[t].shift())()},t.exports=s},function(t,e){"use strict";function r(t){return(t.getAttribute("type")||"").toLowerCase()}function n(t,e,n){if(t.tagName.toLowerCase()!==e.toLowerCase())return!1;if(!n)return!0;t=r(t);for(var o=0;o ",i=o.length,a=[],u=0,c=t.length-1;c>=0;c--){if(e=s(t[c]),r=u+a.length*i+e.length,c=n+3){a.unshift("...");break}a.unshift(e),u+=e.length}return a.join(o)}function s(t){if(!t||!t.tagName)return"";var e=[t.tagName];t.id&&e.push("#"+t.id),t.classes&&e.push("."+t.classes.join("."));for(var r=0;r= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar merge = __webpack_require__(6);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(7);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t // Detect both Error and Firefox Exception type\n\t return isType(e, 'error') || isType(e, 'exception');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t var same = true;\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t same = same && result[k] === obj[k];\n\t }\n\t\n\t return (keys.length != 0 && !same) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t if (!baseUrlParts) {\n\t return '(unknown)';\n\t }\n\t\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t return undefined;\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t\n\t for (var i = 0, l = o.key.length; i < l; ++i) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t case 'exception': // Firefox Exception type\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = merge(custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\tvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\n\tvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\t\n\tfunction arrayIncludes(arr, val) {\n\t for (var k = 0; k < arr.length; ++k) {\n\t if (arr[k] === val) {\n\t return true;\n\t }\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction createTelemetryEvent(args) {\n\t var type, metadata, level;\n\t var arg;\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'string':\n\t if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n\t type = arg;\n\t } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n\t level = arg;\n\t }\n\t break;\n\t case 'object':\n\t metadata = arg;\n\t break;\n\t default:\n\t break;\n\t }\n\t }\n\t var event = {\n\t type: type || 'manual',\n\t metadata: metadata || {},\n\t level: level\n\t };\n\t\n\t return event;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len - 1; ++i) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart) {\n\t return paramPart + redact();\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact();\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; ++i) {\n\t arg = args[i];\n\t switch (typeName(arg)) {\n\t case 'object':\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500) {\n\t arg = arg.substr(0, 497) + '...';\n\t }\n\t break;\n\t case 'null':\n\t arg = 'null';\n\t break;\n\t case 'undefined':\n\t arg = 'undefined';\n\t break;\n\t case 'symbol':\n\t arg = arg.toString();\n\t break;\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tfunction filterIp(requestData, captureIp) {\n\t if (!requestData || !requestData['user_ip'] || captureIp === true) {\n\t return;\n\t }\n\t var newIp = requestData['user_ip'];\n\t if (!captureIp) {\n\t newIp = null;\n\t } else {\n\t try {\n\t var parts;\n\t if (newIp.indexOf('.') !== -1) {\n\t parts = newIp.split('.');\n\t parts.pop();\n\t parts.push('0');\n\t newIp = parts.join('.');\n\t } else if (newIp.indexOf(':') !== -1) {\n\t parts = newIp.split(':');\n\t if (parts.length > 2) {\n\t var beginning = parts.slice(0, 3);\n\t var slashIdx = beginning[2].indexOf('/');\n\t if (slashIdx !== -1) {\n\t beginning[2] = beginning[2].substring(0, slashIdx);\n\t }\n\t var terminal = '0000:0000:0000:0000:0000';\n\t newIp = beginning.concat(terminal).join(':');\n\t }\n\t } else {\n\t newIp = null;\n\t }\n\t } catch (e) {\n\t newIp = null;\n\t }\n\t }\n\t requestData['user_ip'] = newIp;\n\t}\n\t\n\tfunction handleOptions(current, input, payload) {\n\t var result = merge(current, input, payload);\n\t if (!input || input.overwriteScrubFields) {\n\t return result;\n\t }\n\t if (input.scrubFields) {\n\t result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t createItem: createItem,\n\t createTelemetryEvent: createTelemetryEvent,\n\t filterIp: filterIp,\n\t formatArgsAsString: formatArgsAsString,\n\t formatUrl: formatUrl,\n\t get: get,\n\t handleOptions: handleOptions,\n\t isError: isError,\n\t isFunction: isFunction,\n\t isIterable: isIterable,\n\t isNativeFunction: isNativeFunction,\n\t isType: isType,\n\t jsonParse: jsonParse,\n\t LEVELS: LEVELS,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t merge: merge,\n\t now: now,\n\t redact: redact,\n\t sanitizeUrl: sanitizeUrl,\n\t scrub: scrub,\n\t set: set,\n\t stringify: stringify,\n\t traverse: traverse,\n\t typeName: typeName,\n\t uuid4: uuid4\n\t};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tfunction merge() {\n\t var i, src, copy, clone, name,\n\t result = {},\n\t current = null,\n\t length = arguments.length;\n\t\n\t for (i=0; i < length; i++) {\n\t current = arguments[i];\n\t if (current == null) {\n\t continue;\n\t }\n\t\n\t for (name in current) {\n\t src = result[name];\n\t copy = current[name];\n\t if (result !== copy) {\n\t if (copy && isPlainObject(copy)) {\n\t clone = src && isPlainObject(src) ? src : {};\n\t result[name] = merge(clone, copy);\n\t } else if (typeof copy !== 'undefined') {\n\t result[name] = copy;\n\t }\n\t }\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = merge;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.merge(options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t var events = Array.prototype.slice.call(this.queue, 0);\n\t if (_.isFunction(this.options.filterTelemetry)) {\n\t try {\n\t var i = events.length;\n\t while (i--) {\n\t if (this.options.filterTelemetry(events[i])) {\n\t events.splice(i, 1);\n\t }\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t }\n\t return events;\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (exc) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n\t return this.capture(type, metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar helpers = __webpack_require__(12);\n\tvar truncation = __webpack_require__(13);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.buildJsonPayload = function(data, callback) {\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t if (callback) {\n\t callback(stringifyResult.error);\n\t }\n\t return null;\n\t }\n\t\n\t return stringifyResult.value;\n\t};\n\t\n\t/**\n\t *\n\t * @param jsonPayload\n\t * @param callback\n\t */\n\tApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.merge(oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction raw(payload, jsonBackup) {\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction selectFrames(frames, range) {\n\t var len = frames.length;\n\t if (len > range * 2) {\n\t return frames.slice(0, range).concat(frames.slice(len - range));\n\t }\n\t return frames;\n\t}\n\t\n\tfunction truncateFrames(payload, jsonBackup, range) {\n\t range = (typeof range === 'undefined') ? 30 : range;\n\t var body = payload.data.body;\n\t var frames;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t frames = chain[i].frames;\n\t frames = selectFrames(frames, range);\n\t chain[i].frames = frames;\n\t }\n\t } else if (body.trace) {\n\t frames = body.trace.frames;\n\t frames = selectFrames(frames, range);\n\t body.trace.frames = frames;\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction maybeTruncateValue(len, val) {\n\t if (!val) {\n\t return val;\n\t }\n\t if (val.length > len) {\n\t return val.slice(0, len - 3).concat('...');\n\t }\n\t return val;\n\t}\n\t\n\tfunction truncateStrings(len, payload, jsonBackup) {\n\t function truncator(k, v, seen) {\n\t switch (_.typeName(v)) {\n\t case 'string':\n\t return maybeTruncateValue(len, v);\n\t case 'object':\n\t case 'array':\n\t return _.traverse(v, truncator, seen);\n\t default:\n\t return v;\n\t }\n\t }\n\t payload = _.traverse(payload, truncator, []);\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction truncateTraceData(traceData) {\n\t if (traceData.exception) {\n\t delete traceData.exception.description;\n\t traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n\t }\n\t traceData.frames = selectFrames(traceData.frames, 1);\n\t return traceData;\n\t}\n\t\n\tfunction minBody(payload, jsonBackup) {\n\t var body = payload.data.body;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t chain[i] = truncateTraceData(chain[i]);\n\t }\n\t } else if (body.trace) {\n\t body.trace = truncateTraceData(body.trace);\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction needsTruncation(payload, maxSize) {\n\t return payload.length > maxSize;\n\t}\n\t\n\tfunction truncate(payload, jsonBackup, maxSize) {\n\t maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n\t var strategies = [\n\t raw,\n\t truncateFrames,\n\t truncateStrings.bind(null, 1024),\n\t truncateStrings.bind(null, 512),\n\t truncateStrings.bind(null, 256),\n\t minBody\n\t ];\n\t var strategy, results, result;\n\t\n\t while ((strategy = strategies.shift())) {\n\t results = strategy(payload, jsonBackup);\n\t payload = results[0];\n\t result = results[1];\n\t if (result.error || !needsTruncation(result.value, maxSize)) {\n\t return result;\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t truncate: truncate,\n\t\n\t /* for testing */\n\t raw: raw,\n\t truncateFrames: truncateFrames,\n\t truncateStrings: truncateStrings,\n\t maybeTruncateValue: maybeTruncateValue\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(15);\n\tvar detection = __webpack_require__(16);\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror) {\n\t oldOnError = window.onerror;\n\t while (oldOnError._rollbarOldOnError) {\n\t oldOnError = oldOnError._rollbarOldOnError;\n\t }\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t if (shim) {\n\t fn._rollbarOldOnError = oldOnError;\n\t }\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t // Ignore\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/*global XDomainRequest*/\n\t\n\tvar _ = __webpack_require__(5);\n\tvar truncation = __webpack_require__(13);\n\tvar logger = __webpack_require__(14);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n\t}\n\t\n\t// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n\t// so Angular change detection isn't triggered on each API call.\n\t// This is the equivalent of runOutsideAngular().\n\t//\n\tfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\t\n\t if (currentZone && currentZone._name === 'angular') {\n\t var rootZone = currentZone._parent;\n\t rootZone.run(function () {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t });\n\t } else {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t }\n\t}\n\t\n\t/* global RollbarProxy */\n\tfunction _proxyRequest(json, callback) {\n\t var rollbarProxy = new RollbarProxy();\n\t rollbarProxy.sendJsonPayload(\n\t json,\n\t function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n\t function(err) {\n\t callback(new Error(err));\n\t }\n\t );\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t if (typeof RollbarProxy !== 'undefined') {\n\t return _proxyRequest(data, callback);\n\t }\n\t\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post,\n\t postJsonPayload: postJsonPayload\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar errorParser = __webpack_require__(21);\n\tvar logger = __webpack_require__(14);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e) {\n\t logger.error('Error while parsing the error object.', e);\n\t try {\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t } catch (e2) {\n\t item.message = String(item.err) || String(e2);\n\t }\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.merge(item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t var remoteString = '$remote_ip';\n\t if (!options.captureIp) {\n\t remoteString = null;\n\t } else if (options.captureIp !== true) {\n\t remoteString += '_anonymize';\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: remoteString\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.merge(custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (options.sendFrameUrl) {\n\t frame.url = stackFrame.url;\n\t }\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.merge(custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(22);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext();\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t var name = exception.constructor && exception.constructor.name;\n\t if (!name || !name.length || name.length < 3) {\n\t name = exception.name;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(23)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.merge(item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.merge(extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.merge(item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data, item);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar urlparser = __webpack_require__(19);\n\tvar domUtil = __webpack_require__(28);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction nameFromDescription(description) {\n\t if (!description || !description.attributes) { return null; }\n\t var attrs = description.attributes;\n\t for (var a = 0; a < attrs.length; ++a) {\n\t if (attrs[a].key === 'name') {\n\t return attrs[a].value;\n\t }\n\t }\n\t return null;\n\t}\n\t\n\tfunction defaultValueScrubber(scrubFields) {\n\t var patterns = [];\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t patterns.push(new RegExp(scrubFields[i], 'i'));\n\t }\n\t return function(description) {\n\t var name = nameFromDescription(description);\n\t if (!name) { return false; }\n\t for (var i = 0; i < patterns.length; ++i) {\n\t if (patterns[i].test(name)) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t };\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.merge(this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState < 2) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t }\n\t if (xhr.readyState > 3) {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber) {\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t } else if (this.defaultValueScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// rollbar.umd.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c18a4c6af32f5e775eb5","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 14\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 15\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 18\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 20\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 22\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 27\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 28\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///rollbar.umd.min.js","webpack:///webpack/bootstrap 55abcf53b0a450d4ecf7","webpack:///./src/browser/bundles/rollbar.js","webpack:///./src/browser/rollbar.js","webpack:///./src/rollbar.js","webpack:///./src/rateLimiter.js","webpack:///./src/utility.js","webpack:///./src/merge.js","webpack:///./vendor/JSON-js/json3.js","webpack:///./src/queue.js","webpack:///./src/notifier.js","webpack:///./src/telemetry.js","webpack:///./src/api.js","webpack:///./src/apiUtility.js","webpack:///./src/truncation.js","webpack:///./src/browser/logger.js","webpack:///./~/console-polyfill/index.js","webpack:///./src/browser/detection.js","webpack:///./src/browser/globalSetup.js","webpack:///./src/browser/transport.js","webpack:///./src/browser/url.js","webpack:///./src/browser/transforms.js","webpack:///./src/browser/errorParser.js","webpack:///./~/error-stack-parser/error-stack-parser.js","webpack:///./~/error-stack-parser/~/stackframe/stackframe.js","webpack:///./src/transforms.js","webpack:///./src/browser/predicates.js","webpack:///./src/predicates.js","webpack:///./src/browser/telemetry.js","webpack:///./src/browser/domUtility.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","rollbar","options","window","_rollbarConfig","alias","globalAlias","shimRunning","shimId","undefined","_rollbarStartTime","Date","getTime","Rollbar","_rollbarDidLoad","self","client","_","handleOptions","defaultOptions","api","API","transport","urllib","Client","logger","gWindow","gDocument","document","addTransformsToNotifier","notifier","addPredicatesToQueue","queue","captureUncaught","handleUncaughtExceptions","globals","captureUncaughtExceptions","wrapGlobals","captureUnhandledRejections","handleUnhandledRejections","instrumenter","Instrumenter","telemeter","instrument","handleUninitialized","maybeCallback","message","error","Error","addTransform","transforms","handleItemWithError","ensureItemHasSomethingToSay","addBaseInfo","addRequestInfo","addClientInfo","addPluginInfo","addBody","sharedTransforms","addMessageWithError","addTelemetryData","addConfigToPayload","scrubPayload","userTransform","itemToPayload","addPredicate","sharedPredicates","checkLevel","predicates","checkIgnore","userCheckIgnore","urlIsNotBlacklisted","urlIsWhitelisted","messageIsIgnored","_getFirstFunction","args","i","len","length","isFunction","errorParser","_instance","init","global","configure","prototype","payloadData","oldOptions","payload","lastError","log","item","_createItem","arguments","uuid","apply","debug","info","warn","warning","critical","buildJsonPayload","sendJsonPayload","jsonPayload","handleUncaughtException","url","lineno","colno","context","stackInfo","makeUnhandledStackInfo","isError","_unhandledStackInfo","level","uncaughtErrorLevel","_isUncaught","handleUnhandledRejection","reason","promise","reasonResult","stringify","value","_rollbarContext","_originalArgs","push","wrap","f","_before","ctxFn","_isWrap","_rollbar_wrapped","exc","e","_rollbarWrappedError","isType","String","_wrappedSource","toString","hasOwnProperty","prop","captureEvent","event","createTelemetryEvent","type","metadata","captureDomContentLoaded","ts","captureLoad","createItem","version","scrubFields","logLevel","reportLevel","endpoint","verbose","enabled","sendConfig","includeItemsInTelemetry","captureIp","platform","merge","rateLimiter","configureGlobal","setPlatformOptions","Queue","Notifier","Telemeter","lastErrorHash","generateItemHash","stack","err","RateLimiter","maxItems","itemsPerMinute","_defaultLogLevel","_log","wait","callback","postJsonPayload","defaultLevel","_sameAsLastError","_captureRollbarItem","telemetryEvents","copyEvents","itemHash","startTime","now","counter","perMinCounter","platformOptions","checkRate","limit","ignoreRateLimit","shouldSendValue","shouldSend","globalRateLimit","limitPerMin","perMinute","rateLimitPayload","msg","environment","body","extra","language","framework","name","globalSettings","elapsedTime","globalRateLimitPerMin","setupJSON","__initRollbarJSON","isDefined","JSON","isNativeFunction","RollbarJSON","parse","setupCustomJSON","x","t","typeName","match","toLowerCase","reRegExpChar","funcMatchString","Function","Object","replace","reIsNative","RegExp","isObject","test","u","isIterable","traverse","obj","func","seen","k","v","isObj","isArray","keys","indexOf","result","same","redact","uuid4","d","r","Math","random","floor","sanitizeUrl","baseUrlParts","parseUri","anchor","source","query","str","o","parseUriOptions","parser","strictMode","exec","uri","l","key","q","$0","$1","$2","addParamsAndAccessTokenToPath","accessToken","params","access_token","paramsArray","join","sort","path","qs","h","substring","formatUrl","protocol","port","hostname","backup","jsonError","backupError","jsonParse","s","mode","backupMessage","location","line","column","guessFunctionName","gatherContext","href","useragent","navigator","userAgent","wrapCallback","resp","requestKeys","lambdaContext","custom","request","arg","extraArgs","typ","DOMException","j","timestamp","arrayIncludes","arr","val","TELEMETRY_TYPES","TELEMETRY_LEVELS","get","split","set","temp","replacement","scrub","data","redactQueryParam","dummy0","paramPart","paramScrubber","queryRes","valScrubber","paramRes","scrubber","tmpV","_getScrubFieldRegexs","_getScrubQueryParamRegexs","pat","ret","formatArgsAsString","substr","filterIp","requestData","newIp","parts","pop","beginning","slice","slashIdx","terminal","concat","current","input","overwriteScrubFields","LEVELS","strict","loose","src","copy","clone","isPlainObject","hasOwn","toStr","hasOwnConstructor","hasIsPrototypeOf","constructor","n","this_value","valueOf","quote","string","rx_escapable","lastIndex","a","meta","charCodeAt","holder","partial","mind","gap","toJSON","rep","isFinite","indent","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Boolean","Number","\b","\t","\n","\f","\r","\"","\\","replacer","space","","debackslashify","text","ignore","b","fromCharCode","parseInt","escapes","state","container","/","go","firstokey","okey","ovalue","firstavalue","avalue","number","action","{","}","ocomma","[","]","acomma",":","colon","SyntaxError",",","true","false","null","reviver","tx","walk","pendingItems","pendingRequests","retryQueue","retryHandle","waitCallback","waitIntervalID","predicate","addPendingItem","removePendingItem","idx","splice","addItem","originalError","originalItem","predicateResult","_applyPredicates","stop","_maybeLog","_makeApiRequest","_dequeuePendingRequest","bind","_maybeCallWait","clearInterval","setInterval","rateLimitResponse","postItem","_maybeRetry","RETRIABLE_ERRORS","shouldRetry","retryInterval","code","_retryApiRequest","retryObject","shift","transform","_applyTransforms","transformIndex","transformsLength","cb","maxTelemetryEvents","MAX_EVENTS","maxQueueSize","max","min","getLevel","manual","newMaxEvents","deleteCount","events","Array","filterTelemetry","capture","rollbarUUID","timestamp_ms","captureError","captureLog","captureNetwork","subtype","levelFromStatus","status_code","statusCode","captureDom","element","checked","captureNavigation","from","to","captureConnectivityChange","change","Api","jsonBackup","transportOptions","_getTransport","helpers","getTransportFromOptions","truncation","search","buildPayload","post","stringifyResult","truncate","contextResult","defaults","proxy","opts","pathname","method","host","appendPathToPath","base","baseTrailingSlash","pathBeginningSlash","raw","selectFrames","frames","range","truncateFrames","trace_chain","chain","trace","maybeTruncateValue","truncateStrings","truncator","truncateTraceData","traceData","exception","description","minBody","needsTruncation","maxSize","strategy","results","strategies","unshift","detection","ieVersion","console","con","dummy","properties","methods","getIEVersion","undef","div","createElement","all","getElementsByTagName","innerHTML","Detection","handler","shim","oldOnError","_rollbarOldOnError","onerror","fn","_rollbarWindowOnError","old","_rollbarURH","belongsToShim","removeEventListener","rejectionHandler","evt","detail","addEventListener","_extendListenerPrototype","oldAddEventListener","_rollbarOldAdd","addFn","bubble","oldRemoveEventListener","_rollbarOldRemove","removeFn","requestFactory","_makeZoneRequest","writeData","currentZone","Zone","_name","rootZone","_parent","run","_makeRequest","_proxyRequest","json","rollbarProxy","RollbarProxy","_msg","_createXMLHTTPObject","onreadystatechange","readyState","parseResponse","responseText","_isSuccess","_isNormalFailure","status","_newRetriableError","ex","open","setRequestHeader","send","e1","XDomainRequest","xdomainrequest","onprogress","ontimeout","onload","e2","xmlhttp","factories","XMLHttpRequest","ActiveXObject","numFactories","last","auth","hash","pathParts","_savedStackTrace","server","remoteString","query_string","user_ip","nav","scr","screen","runtime_ms","round","javascript","browser","cookie_enabled","cookieEnabled","width","height","cur","plugins","navPlugins","addBodyTrace","addBodyMessage","messageResult","guess","guessErrorClass","className","class","rawStack","rawException","stackFrame","frame","pre","contextLength","mid","filename","sendFrameUrl","endsWith","reverse","UNKNOWN_FUNCTION","Frame","_stackFrame","fileName","lineNumber","functionName","columnNumber","Stack","getStack","parserStack","ErrorStackParser","errMsg","errClassMatch","ERR_CLASS_REGEXP","errClass","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","StackFrame","_map","array","thisArg","map","output","_filter","filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","isNaN","parseFloat","filtered","tokens","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","_isNumber","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","getArgs","TypeError","getFileName","getLineNumber","getColumnNumber","getSource","payloadOptions","tracePath","newExtra","newItem","configKey","settings","levelVal","reportLevelVal","isUncaught","onSendCallback","urlIsOnAList","whiteOrBlack","black","list","frameLength","listLength","urlRegex","hostBlackList","hostWhiteList","listName","exceptionMessage","ignoredMessages","rIgnoredMessage","traceMessage","bodyMessage","replacements","orig","restore","nameFromDescription","attributes","attrs","defaultValueScrubber","patterns","_window","_document","autoInstrument","scrubTelemetryInputs","telemetryScrubber","network","navigation","connectivity","eventRemovers","dom","_location","_lastHref","urlparser","domUtil","networkResponseHeaders","networkResponseBody","networkRequestBody","oldSettings","deinstrumentNetwork","instrumentNetwork","deinstrumentConsole","instrumentConsole","deinstrumentDom","instrumentDom","deinstrumentNavigation","instrumentNavigation","deinstrumentConnectivity","instrumentConnectivity","wrapProp","xhr","xhrp","__rollbar_xhr","start_time_ms","end_time_ms","onreadystatechangeHandler","__rollbar_event","headers","headersConfig","header","allHeaders","getAllResponseHeaders","trim","getResponseHeader","response","then","wrapConsole","origConsole","removeListeners","clickHandler","handleClick","blurHandler","handleBlur","addListener","getElementFromEvent","hasTag","tagName","anchorOrButton","isDescribedElement","captureDomEvent","handleSelectInputChanged","elem","multiple","selected","selectedIndex","isChecked","getElementType","describeElement","elementString","elementArrayToString","treeToArray","chrome","chromePackagedApp","app","runtime","hasPushState","history","pushState","handleUrlChange","parsedHref","parsedTo","parsedFrom","section","altType","attachEvent","detachEvent","getAttribute","subtypes","doc","target","elementFromPoint","clientX","clientY","nextDescription","MAX_HEIGHT","out","parentNode","nextStr","totalLength","MAX_LENGTH","separator","separatorLength","descriptionToString","desc","classes","attr"],"mappings":"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","file":"rollbar.umd.min.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[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(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[\"rollbar\"] = factory();\n\telse\n\t\troot[\"rollbar\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar rollbar = __webpack_require__(2);\n\t\n\tvar options = (typeof window !== 'undefined') && window._rollbarConfig;\n\tvar alias = options && options.globalAlias || 'Rollbar';\n\tvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\t\n\tif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n\t window._rollbarStartTime = (new Date()).getTime();\n\t}\n\t\n\tif (!shimRunning && options) {\n\t var Rollbar = new rollbar(options);\n\t window[alias] = Rollbar;\n\t} else if (typeof window !== 'undefined') {\n\t window.rollbar = rollbar;\n\t window._rollbarDidLoad = true;\n\t} else if (typeof self !== 'undefined') {\n\t self.rollbar = rollbar;\n\t self._rollbarDidLoad = true;\n\t}\n\t\n\tmodule.exports = rollbar;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar Client = __webpack_require__(3);\n\tvar _ = __webpack_require__(5);\n\tvar API = __webpack_require__(11);\n\tvar logger = __webpack_require__(14);\n\tvar globals = __webpack_require__(17);\n\t\n\tvar transport = __webpack_require__(18);\n\tvar urllib = __webpack_require__(19);\n\t\n\tvar transforms = __webpack_require__(20);\n\tvar sharedTransforms = __webpack_require__(24);\n\tvar predicates = __webpack_require__(25);\n\tvar sharedPredicates = __webpack_require__(26);\n\tvar errorParser = __webpack_require__(21);\n\tvar Instrumenter = __webpack_require__(27);\n\t\n\tfunction Rollbar(options, client) {\n\t this.options = _.handleOptions(defaultOptions, options);\n\t var api = new API(this.options, transport, urllib);\n\t this.client = client || new Client(this.options, api, logger, 'browser');\n\t\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var gDocument = (typeof document != 'undefined') && document;\n\t addTransformsToNotifier(this.client.notifier, gWindow);\n\t addPredicatesToQueue(this.client.queue);\n\t if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n\t globals.captureUncaughtExceptions(gWindow, this);\n\t globals.wrapGlobals(gWindow, this);\n\t }\n\t if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n\t globals.captureUnhandledRejections(gWindow, this);\n\t }\n\t\n\t this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n\t this.instrumenter.instrument();\n\t}\n\t\n\tvar _instance = null;\n\tRollbar.init = function(options, client) {\n\t if (_instance) {\n\t return _instance.global(options).configure(options);\n\t }\n\t _instance = new Rollbar(options, client);\n\t return _instance;\n\t};\n\t\n\tfunction handleUninitialized(maybeCallback) {\n\t var message = 'Rollbar is not initialized';\n\t logger.error(message);\n\t if (maybeCallback) {\n\t maybeCallback(new Error(message));\n\t }\n\t}\n\t\n\tRollbar.prototype.global = function(options) {\n\t this.client.global(options);\n\t return this;\n\t};\n\tRollbar.global = function(options) {\n\t if (_instance) {\n\t return _instance.global(options);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.handleOptions(oldOptions, options, payload);\n\t this.client.configure(this.options, payloadData);\n\t this.instrumenter.configure(this.options);\n\t return this;\n\t};\n\tRollbar.configure = function(options, payloadData) {\n\t if (_instance) {\n\t return _instance.configure(options, payloadData);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.lastError = function() {\n\t return this.client.lastError;\n\t};\n\tRollbar.lastError = function() {\n\t if (_instance) {\n\t return _instance.lastError();\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.log = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.log(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.log = function() {\n\t if (_instance) {\n\t return _instance.log.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.debug = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.debug(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.debug = function() {\n\t if (_instance) {\n\t return _instance.debug.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.info = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.info(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.info = function() {\n\t if (_instance) {\n\t return _instance.info.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warn = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warn(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warn = function() {\n\t if (_instance) {\n\t return _instance.warn.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.warning = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.warning(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.warning = function() {\n\t if (_instance) {\n\t return _instance.warning.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.error = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.error(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.error = function() {\n\t if (_instance) {\n\t return _instance.error.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.critical = function() {\n\t var item = this._createItem(arguments);\n\t var uuid = item.uuid;\n\t this.client.critical(item);\n\t return {uuid: uuid};\n\t};\n\tRollbar.critical = function() {\n\t if (_instance) {\n\t return _instance.critical.apply(_instance, arguments);\n\t } else {\n\t var maybeCallback = _getFirstFunction(arguments);\n\t handleUninitialized(maybeCallback);\n\t }\n\t};\n\t\n\tRollbar.prototype.buildJsonPayload = function(item) {\n\t return this.client.buildJsonPayload(item);\n\t};\n\tRollbar.buildJsonPayload = function() {\n\t if (_instance) {\n\t return _instance.buildJsonPayload.apply(_instance, arguments);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n\t return this.client.sendJsonPayload(jsonPayload);\n\t};\n\tRollbar.sendJsonPayload = function() {\n\t if (_instance) {\n\t return _instance.sendJsonPayload.apply(_instance, arguments);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n\t var item;\n\t var stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t 'onerror',\n\t 'uncaught exception',\n\t errorParser\n\t );\n\t if (_.isError(error)) {\n\t item = this._createItem([message, error, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else if (_.isError(url)) {\n\t item = this._createItem([message, url, context]);\n\t item._unhandledStackInfo = stackInfo;\n\t } else {\n\t item = this._createItem([message, context]);\n\t item.stackInfo = stackInfo;\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n\t var message = 'unhandled rejection was null or undefined!';\n\t if (reason) {\n\t if (reason.message) {\n\t message = reason.message;\n\t } else {\n\t var reasonResult = _.stringify(reason);\n\t if (reasonResult.value) {\n\t message = reasonResult.value;\n\t }\n\t }\n\t }\n\t var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\t\n\t var item;\n\t if (_.isError(reason)) {\n\t item = this._createItem([message, reason, context]);\n\t } else {\n\t item = this._createItem([message, reason, context]);\n\t item.stackInfo = _.makeUnhandledStackInfo(\n\t message,\n\t '',\n\t 0,\n\t 0,\n\t null,\n\t 'unhandledrejection',\n\t '',\n\t errorParser\n\t );\n\t }\n\t item.level = this.options.uncaughtErrorLevel;\n\t item._isUncaught = true;\n\t item._originalArgs = item._originalArgs || [];\n\t item._originalArgs.push(promise);\n\t this.client.log(item);\n\t};\n\t\n\tRollbar.prototype.wrap = function(f, context, _before) {\n\t try {\n\t var ctxFn;\n\t if(_.isFunction(context)) {\n\t ctxFn = context;\n\t } else {\n\t ctxFn = function() { return context || {}; };\n\t }\n\t\n\t if (!_.isFunction(f)) {\n\t return f;\n\t }\n\t\n\t if (f._isWrap) {\n\t return f;\n\t }\n\t\n\t if (!f._rollbar_wrapped) {\n\t f._rollbar_wrapped = function () {\n\t if (_before && _.isFunction(_before)) {\n\t _before.apply(this, arguments);\n\t }\n\t try {\n\t return f.apply(this, arguments);\n\t } catch(exc) {\n\t var e = exc;\n\t if (e && window._rollbarWrappedError !== e) {\n\t if (_.isType(e, 'string')) {\n\t e = new String(e);\n\t }\n\t e._rollbarContext = ctxFn() || {};\n\t e._rollbarContext._wrappedSource = f.toString();\n\t\n\t window._rollbarWrappedError = e;\n\t }\n\t throw e;\n\t }\n\t };\n\t\n\t f._rollbar_wrapped._isWrap = true;\n\t\n\t if (f.hasOwnProperty) {\n\t for (var prop in f) {\n\t if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n\t f._rollbar_wrapped[prop] = f[prop];\n\t }\n\t }\n\t }\n\t }\n\t\n\t return f._rollbar_wrapped;\n\t } catch (e) {\n\t // Return the original function if the wrap fails.\n\t return f;\n\t }\n\t};\n\tRollbar.wrap = function(f, context) {\n\t if (_instance) {\n\t return _instance.wrap(f, context);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\tRollbar.prototype.captureEvent = function() {\n\t var event = _.createTelemetryEvent(arguments);\n\t return this.client.captureEvent(event.type, event.metadata, event.level);\n\t};\n\tRollbar.captureEvent = function() {\n\t if (_instance) {\n\t return _instance.captureEvent.apply(_instance, arguments);\n\t } else {\n\t handleUninitialized();\n\t }\n\t};\n\t\n\t// The following two methods are used internally and are not meant for public use\n\tRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(e, ts) {\n\t if (!ts) {\n\t ts = new Date();\n\t }\n\t return this.client.captureLoad(ts);\n\t};\n\t\n\t/* Internal */\n\t\n\tfunction addTransformsToNotifier(notifier, gWindow) {\n\t notifier\n\t .addTransform(transforms.handleItemWithError)\n\t .addTransform(transforms.ensureItemHasSomethingToSay)\n\t .addTransform(transforms.addBaseInfo)\n\t .addTransform(transforms.addRequestInfo(gWindow))\n\t .addTransform(transforms.addClientInfo(gWindow))\n\t .addTransform(transforms.addPluginInfo(gWindow))\n\t .addTransform(transforms.addBody)\n\t .addTransform(sharedTransforms.addMessageWithError)\n\t .addTransform(sharedTransforms.addTelemetryData)\n\t .addTransform(sharedTransforms.addConfigToPayload)\n\t .addTransform(transforms.scrubPayload)\n\t .addTransform(sharedTransforms.userTransform(logger))\n\t .addTransform(sharedTransforms.itemToPayload);\n\t}\n\t\n\tfunction addPredicatesToQueue(queue) {\n\t queue\n\t .addPredicate(sharedPredicates.checkLevel)\n\t .addPredicate(predicates.checkIgnore)\n\t .addPredicate(sharedPredicates.userCheckIgnore(logger))\n\t .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n\t .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n\t .addPredicate(sharedPredicates.messageIsIgnored(logger));\n\t}\n\t\n\tRollbar.prototype._createItem = function(args) {\n\t return _.createItem(args, logger, this);\n\t};\n\t\n\tfunction _getFirstFunction(args) {\n\t for (var i = 0, len = args.length; i < len; ++i) {\n\t if (_.isFunction(args[i])) {\n\t return args[i];\n\t }\n\t }\n\t return undefined;\n\t}\n\t\n\t/* global __NOTIFIER_VERSION__:false */\n\t/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n\t/* global __DEFAULT_LOG_LEVEL__:false */\n\t/* global __DEFAULT_REPORT_LEVEL__:false */\n\t/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n\t/* global __DEFAULT_ENDPOINT__:false */\n\t\n\tvar defaultOptions = {\n\t version: (\"2.6.1\"),\n\t scrubFields: ([\"pw\",\"pass\",\"passwd\",\"password\",\"secret\",\"confirm_password\",\"confirmPassword\",\"password_confirmation\",\"passwordConfirmation\",\"access_token\",\"accessToken\",\"secret_key\",\"secretKey\",\"secretToken\",\"cc-number\",\"card number\",\"cardnumber\",\"cardnum\",\"ccnum\",\"ccnumber\",\"cc num\",\"creditcardnumber\",\"credit card number\",\"newcreditcardnumber\",\"new credit card\",\"creditcardno\",\"credit card no\",\"card#\",\"card #\",\"cc-csc\",\"cvc2\",\"cvv2\",\"ccv2\",\"security code\",\"card verification\",\"name on credit card\",\"name on card\",\"nameoncard\",\"cardholder\",\"card holder\",\"name des karteninhabers\",\"card type\",\"cardtype\",\"cc type\",\"cctype\",\"payment type\",\"expiration date\",\"expirationdate\",\"expdate\",\"cc-exp\"]),\n\t logLevel: (\"debug\"),\n\t reportLevel: (\"debug\"),\n\t uncaughtErrorLevel: (\"error\"),\n\t endpoint: (\"api.rollbar.com/api/1/item/\"),\n\t verbose: false,\n\t enabled: true,\n\t sendConfig: false,\n\t includeItemsInTelemetry: true,\n\t captureIp: true\n\t};\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar RateLimiter = __webpack_require__(4);\n\tvar Queue = __webpack_require__(8);\n\tvar Notifier = __webpack_require__(9);\n\tvar Telemeter = __webpack_require__(10);\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Rollbar - the interface to Rollbar\n\t *\n\t * @param options\n\t * @param api\n\t * @param logger\n\t */\n\tfunction Rollbar(options, api, logger, platform) {\n\t this.options = _.merge(options);\n\t this.logger = logger;\n\t Rollbar.rateLimiter.configureGlobal(this.options);\n\t Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n\t this.api = api;\n\t this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n\t this.notifier = new Notifier(this.queue, this.options);\n\t this.telemeter = new Telemeter(this.options);\n\t this.lastError = null;\n\t this.lastErrorHash = 'none';\n\t}\n\t\n\tvar defaultOptions = {\n\t maxItems: 0,\n\t itemsPerMinute: 60\n\t};\n\t\n\tRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\t\n\tRollbar.prototype.global = function(options) {\n\t Rollbar.rateLimiter.configureGlobal(options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.configure = function(options, payloadData) {\n\t var oldOptions = this.options;\n\t var payload = {};\n\t if (payloadData) {\n\t payload = {payload: payloadData};\n\t }\n\t this.options = _.merge(oldOptions, options, payload);\n\t this.notifier && this.notifier.configure(this.options);\n\t this.telemeter && this.telemeter.configure(this.options);\n\t this.global(this.options);\n\t return this;\n\t};\n\t\n\tRollbar.prototype.log = function(item) {\n\t var level = this._defaultLogLevel();\n\t return this._log(level, item);\n\t};\n\t\n\tRollbar.prototype.debug = function(item) {\n\t this._log('debug', item);\n\t};\n\t\n\tRollbar.prototype.info = function(item) {\n\t this._log('info', item);\n\t};\n\t\n\tRollbar.prototype.warn = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.warning = function(item) {\n\t this._log('warning', item);\n\t};\n\t\n\tRollbar.prototype.error = function(item) {\n\t this._log('error', item);\n\t};\n\t\n\tRollbar.prototype.critical = function(item) {\n\t this._log('critical', item);\n\t};\n\t\n\tRollbar.prototype.wait = function(callback) {\n\t this.queue.wait(callback);\n\t};\n\t\n\tRollbar.prototype.captureEvent = function(type, metadata, level) {\n\t return this.telemeter.captureEvent(type, metadata, level);\n\t};\n\t\n\tRollbar.prototype.captureDomContentLoaded = function(ts) {\n\t return this.telemeter.captureDomContentLoaded(ts);\n\t};\n\t\n\tRollbar.prototype.captureLoad = function(ts) {\n\t return this.telemeter.captureLoad(ts);\n\t};\n\t\n\tRollbar.prototype.buildJsonPayload = function(item) {\n\t return this.api.buildJsonPayload(item);\n\t};\n\t\n\tRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n\t this.api.postJsonPayload(jsonPayload);\n\t};\n\t\n\t/* Internal */\n\t\n\tRollbar.prototype._log = function(defaultLevel, item) {\n\t var callback;\n\t if (item.callback) {\n\t callback = item.callback;\n\t delete item.callback;\n\t }\n\t if (this._sameAsLastError(item)) {\n\t if (callback) {\n\t var error = new Error('ignored identical item');\n\t error.item = item;\n\t callback(error);\n\t }\n\t return;\n\t }\n\t try {\n\t item.level = item.level || defaultLevel;\n\t this.telemeter._captureRollbarItem(item);\n\t item.telemetryEvents = this.telemeter.copyEvents();\n\t this.notifier.log(item, callback);\n\t } catch (e) {\n\t this.logger.error(e);\n\t }\n\t};\n\t\n\tRollbar.prototype._defaultLogLevel = function() {\n\t return this.options.logLevel || 'debug';\n\t};\n\t\n\tRollbar.prototype._sameAsLastError = function(item) {\n\t if (!item._isUncaught) {\n\t return false;\n\t }\n\t var itemHash = generateItemHash(item);\n\t if (this.lastErrorHash === itemHash) {\n\t return true;\n\t }\n\t this.lastError = item.err;\n\t this.lastErrorHash = itemHash;\n\t return false;\n\t};\n\t\n\tfunction generateItemHash(item) {\n\t var message = item.message || '';\n\t var stack = (item.err || {}).stack || String(item.err);\n\t return message + '::' + stack;\n\t}\n\t\n\tmodule.exports = Rollbar;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n\t *\n\t * @param options - the same options that are accepted by configureGlobal offered as a convenience\n\t */\n\tfunction RateLimiter(options) {\n\t this.startTime = _.now();\n\t this.counter = 0;\n\t this.perMinCounter = 0;\n\t this.platform = null;\n\t this.platformOptions = {};\n\t this.configureGlobal(options);\n\t}\n\t\n\tRateLimiter.globalSettings = {\n\t startTime: _.now(),\n\t maxItems: undefined,\n\t itemsPerMinute: undefined\n\t};\n\t\n\t/*\n\t * configureGlobal - set the global rate limiter options\n\t *\n\t * @param options - Only the following values are recognized:\n\t * startTime: a timestamp of the form returned by (new Date()).getTime()\n\t * maxItems: the maximum items\n\t * itemsPerMinute: the max number of items to send in a given minute\n\t */\n\tRateLimiter.prototype.configureGlobal = function(options) {\n\t if (options.startTime !== undefined) {\n\t RateLimiter.globalSettings.startTime = options.startTime;\n\t }\n\t if (options.maxItems !== undefined) {\n\t RateLimiter.globalSettings.maxItems = options.maxItems;\n\t }\n\t if (options.itemsPerMinute !== undefined) {\n\t RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n\t }\n\t};\n\t\n\t/*\n\t * shouldSend - determine if we should send a given item based on rate limit settings\n\t *\n\t * @param item - the item we are about to send\n\t * @returns An object with the following structure:\n\t * error: (Error|null)\n\t * shouldSend: bool\n\t * payload: (Object|null)\n\t * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n\t * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n\t * describe the situation, but it means that we were already over a rate limit (either globally or\n\t * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n\t * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n\t * place of the passed in item.\n\t */\n\tRateLimiter.prototype.shouldSend = function(item, now) {\n\t now = now || _.now();\n\t var elapsedTime = now - this.startTime;\n\t if (elapsedTime < 0 || elapsedTime >= 60000) {\n\t this.startTime = now;\n\t this.perMinCounter = 0;\n\t }\n\t\n\t var globalRateLimit = RateLimiter.globalSettings.maxItems;\n\t var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\t\n\t if (checkRate(item, globalRateLimit, this.counter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n\t } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n\t return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n\t }\n\t this.counter++;\n\t this.perMinCounter++;\n\t\n\t var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n\t var perMinute = shouldSend;\n\t shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n\t return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n\t};\n\t\n\tRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n\t this.platform = platform;\n\t this.platformOptions = options;\n\t};\n\t\n\t/* Helpers */\n\t\n\tfunction checkRate(item, limit, counter) {\n\t return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n\t}\n\t\n\tfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n\t var payload = null;\n\t if (error) {\n\t error = new Error(error);\n\t }\n\t if (!error && !shouldSend) {\n\t payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n\t }\n\t return {error: error, shouldSend: shouldSend, payload: payload};\n\t}\n\t\n\tfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n\t var environment = options.environment || (options.payload && options.payload.environment);\n\t var msg;\n\t if (perMinute) {\n\t msg = 'item per minute limit reached, ignoring errors until timeout';\n\t } else {\n\t msg = 'maxItems has been hit, ignoring errors until reset.';\n\t }\n\t var item = {\n\t body: {\n\t message: {\n\t body: msg,\n\t extra: {\n\t maxItems: globalRateLimit,\n\t itemsPerMinute: limitPerMin\n\t }\n\t }\n\t },\n\t language: 'javascript',\n\t environment: environment,\n\t notifier: {\n\t version: (options.notifier && options.notifier.version) || options.version\n\t }\n\t };\n\t if (platform === 'browser') {\n\t item.platform = 'browser';\n\t item.framework = 'browser-js';\n\t item.notifier.name = 'rollbar-browser-js';\n\t } else if (platform === 'server') {\n\t item.framework = options.framework || 'node-js';\n\t item.notifier.name = options.notifier.name;\n\t } else if (platform === 'react-native') {\n\t item.framework = options.framework || 'react-native';\n\t item.notifier.name = options.notifier.name;\n\t }\n\t return item;\n\t}\n\t\n\tmodule.exports = RateLimiter;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar merge = __webpack_require__(6);\n\t\n\tvar RollbarJSON = {};\n\tvar __initRollbarJSON = false;\n\tfunction setupJSON() {\n\t if (__initRollbarJSON) {\n\t return;\n\t }\n\t __initRollbarJSON = true;\n\t\n\t if (isDefined(JSON)) {\n\t if (isNativeFunction(JSON.stringify)) {\n\t RollbarJSON.stringify = JSON.stringify;\n\t }\n\t if (isNativeFunction(JSON.parse)) {\n\t RollbarJSON.parse = JSON.parse;\n\t }\n\t }\n\t if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n\t var setupCustomJSON = __webpack_require__(7);\n\t setupCustomJSON(RollbarJSON);\n\t }\n\t}\n\tsetupJSON();\n\t\n\t/*\n\t * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n\t * given string.\n\t *\n\t * @param x - any value\n\t * @param t - a lowercase string containing one of the following type names:\n\t * - undefined\n\t * - null\n\t * - error\n\t * - number\n\t * - boolean\n\t * - string\n\t * - symbol\n\t * - function\n\t * - object\n\t * - array\n\t * @returns true if x is of type t, otherwise false\n\t */\n\tfunction isType(x, t) {\n\t return t === typeName(x);\n\t}\n\t\n\t/*\n\t * typeName - Given a Javascript value, returns the type of the object as a string\n\t */\n\tfunction typeName(x) {\n\t var name = typeof x;\n\t if (name !== 'object') {\n\t return name;\n\t }\n\t if (!x) {\n\t return 'null';\n\t }\n\t if (x instanceof Error) {\n\t return 'error';\n\t }\n\t return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n\t}\n\t\n\t/* isFunction - a convenience function for checking if a value is a function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a function, otherwise false\n\t */\n\tfunction isFunction(f) {\n\t return isType(f, 'function');\n\t}\n\t\n\t/* isNativeFunction - a convenience function for checking if a value is a native JS function\n\t *\n\t * @param f - any value\n\t * @returns true if f is a native JS function, otherwise false\n\t */\n\tfunction isNativeFunction(f) {\n\t var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n\t .replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n\t var reIsNative = RegExp('^' + funcMatchString + '$');\n\t return isObject(f) && reIsNative.test(f);\n\t}\n\t\n\t/* isObject - Checks if the argument is an object\n\t *\n\t * @param value - any value\n\t * @returns true is value is an object function is an object)\n\t*/\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\t\n\t/*\n\t * isDefined - a convenience function for checking if a value is not equal to undefined\n\t *\n\t * @param u - any value\n\t * @returns true if u is anything other than undefined\n\t */\n\tfunction isDefined(u) {\n\t return !isType(u, 'undefined');\n\t}\n\t\n\t/*\n\t * isIterable - convenience function for checking if a value can be iterated, essentially\n\t * whether it is an object or an array.\n\t *\n\t * @param i - any value\n\t * @returns true if i is an object or an array as determined by `typeName`\n\t */\n\tfunction isIterable(i) {\n\t var type = typeName(i);\n\t return (type === 'object' || type === 'array');\n\t}\n\t\n\t/*\n\t * isError - convenience function for checking if a value is of an error type\n\t *\n\t * @param e - any value\n\t * @returns true if e is an error\n\t */\n\tfunction isError(e) {\n\t // Detect both Error and Firefox Exception type\n\t return isType(e, 'error') || isType(e, 'exception');\n\t}\n\t\n\tfunction traverse(obj, func, seen) {\n\t var k, v, i;\n\t var isObj = isType(obj, 'object');\n\t var isArray = isType(obj, 'array');\n\t var keys = [];\n\t\n\t if (isObj && seen.indexOf(obj) !== -1) {\n\t return obj;\n\t }\n\t seen.push(obj);\n\t\n\t if (isObj) {\n\t for (k in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, k)) {\n\t keys.push(k);\n\t }\n\t }\n\t } else if (isArray) {\n\t for (i = 0; i < obj.length; ++i) {\n\t keys.push(i);\n\t }\n\t }\n\t\n\t var result = isObj ? {} : [];\n\t var same = true;\n\t for (i = 0; i < keys.length; ++i) {\n\t k = keys[i];\n\t v = obj[k];\n\t result[k] = func(k, v, seen);\n\t same = same && result[k] === obj[k];\n\t }\n\t\n\t return (keys.length != 0 && !same) ? result : obj;\n\t}\n\t\n\tfunction redact() {\n\t return '********';\n\t}\n\t\n\t// from http://stackoverflow.com/a/8809472/1138191\n\tfunction uuid4() {\n\t var d = now();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n\t });\n\t return uuid;\n\t}\n\t\n\tvar LEVELS = {\n\t debug: 0,\n\t info: 1,\n\t warning: 2,\n\t error: 3,\n\t critical: 4\n\t};\n\t\n\tfunction sanitizeUrl(url) {\n\t var baseUrlParts = parseUri(url);\n\t if (!baseUrlParts) {\n\t return '(unknown)';\n\t }\n\t\n\t // remove a trailing # if there is no anchor\n\t if (baseUrlParts.anchor === '') {\n\t baseUrlParts.source = baseUrlParts.source.replace('#', '');\n\t }\n\t\n\t url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n\t return url;\n\t}\n\t\n\tvar parseUriOptions = {\n\t strictMode: false,\n\t key: [\n\t 'source',\n\t 'protocol',\n\t 'authority',\n\t 'userInfo',\n\t 'user',\n\t 'password',\n\t 'host',\n\t 'port',\n\t 'relative',\n\t 'path',\n\t 'directory',\n\t 'file',\n\t 'query',\n\t 'anchor'\n\t ],\n\t q: {\n\t name: 'queryKey',\n\t parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n\t },\n\t parser: {\n\t strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n\t loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n\t }\n\t};\n\t\n\tfunction parseUri(str) {\n\t if (!isType(str, 'string')) {\n\t return undefined;\n\t }\n\t\n\t var o = parseUriOptions;\n\t var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n\t var uri = {};\n\t\n\t for (var i = 0, l = o.key.length; i < l; ++i) {\n\t uri[o.key[i]] = m[i] || '';\n\t }\n\t\n\t uri[o.q.name] = {};\n\t uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n\t if ($1) {\n\t uri[o.q.name][$1] = $2;\n\t }\n\t });\n\t\n\t return uri;\n\t}\n\t\n\tfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n\t params = params || {};\n\t params.access_token = accessToken;\n\t var paramsArray = [];\n\t var k;\n\t for (k in params) {\n\t if (Object.prototype.hasOwnProperty.call(params, k)) {\n\t paramsArray.push([k, params[k]].join('='));\n\t }\n\t }\n\t var query = '?' + paramsArray.sort().join('&');\n\t\n\t options = options || {};\n\t options.path = options.path || '';\n\t var qs = options.path.indexOf('?');\n\t var h = options.path.indexOf('#');\n\t var p;\n\t if (qs !== -1 && (h === -1 || h > qs)) {\n\t p = options.path;\n\t options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n\t } else {\n\t if (h !== -1) {\n\t p = options.path;\n\t options.path = p.substring(0,h) + query + p.substring(h);\n\t } else {\n\t options.path = options.path + query;\n\t }\n\t }\n\t}\n\t\n\tfunction formatUrl(u, protocol) {\n\t protocol = protocol || u.protocol;\n\t if (!protocol && u.port) {\n\t if (u.port === 80) {\n\t protocol = 'http:';\n\t } else if (u.port === 443) {\n\t protocol = 'https:';\n\t }\n\t }\n\t protocol = protocol || 'https:';\n\t\n\t if (!u.hostname) {\n\t return null;\n\t }\n\t var result = protocol + '//' + u.hostname;\n\t if (u.port) {\n\t result = result + ':' + u.port;\n\t }\n\t if (u.path) {\n\t result = result + u.path;\n\t }\n\t return result;\n\t}\n\t\n\tfunction stringify(obj, backup) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.stringify(obj);\n\t } catch (jsonError) {\n\t if (backup && isFunction(backup)) {\n\t try {\n\t value = backup(obj);\n\t } catch (backupError) {\n\t error = backupError;\n\t }\n\t } else {\n\t error = jsonError;\n\t }\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction jsonParse(s) {\n\t var value, error;\n\t try {\n\t value = RollbarJSON.parse(s);\n\t } catch (e) {\n\t error = e;\n\t }\n\t return {error: error, value: value};\n\t}\n\t\n\tfunction makeUnhandledStackInfo(\n\t message,\n\t url,\n\t lineno,\n\t colno,\n\t error,\n\t mode,\n\t backupMessage,\n\t errorParser\n\t) {\n\t var location = {\n\t url: url || '',\n\t line: lineno,\n\t column: colno\n\t };\n\t location.func = errorParser.guessFunctionName(location.url, location.line);\n\t location.context = errorParser.gatherContext(location.url, location.line);\n\t var href = document && document.location && document.location.href;\n\t var useragent = window && window.navigator && window.navigator.userAgent;\n\t return {\n\t 'mode': mode,\n\t 'message': error ? String(error) : (message || backupMessage),\n\t 'url': href,\n\t 'stack': [location],\n\t 'useragent': useragent\n\t };\n\t}\n\t\n\tfunction wrapCallback(logger, f) {\n\t return function(err, resp) {\n\t try {\n\t f(err, resp);\n\t } catch (e) {\n\t logger.error(e);\n\t }\n\t };\n\t}\n\t\n\tfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n\t var message, err, custom, callback, request;\n\t var arg;\n\t var extraArgs = [];\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'undefined':\n\t break;\n\t case 'string':\n\t message ? extraArgs.push(arg) : message = arg;\n\t break;\n\t case 'function':\n\t callback = wrapCallback(logger, arg);\n\t break;\n\t case 'date':\n\t extraArgs.push(arg);\n\t break;\n\t case 'error':\n\t case 'domexception':\n\t case 'exception': // Firefox Exception type\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t case 'object':\n\t case 'array':\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t if (requestKeys && typ === 'object' && !request) {\n\t for (var j = 0, len = requestKeys.length; j < len; ++j) {\n\t if (arg[requestKeys[j]] !== undefined) {\n\t request = arg;\n\t break;\n\t }\n\t }\n\t if (request) {\n\t break;\n\t }\n\t }\n\t custom ? extraArgs.push(arg) : custom = arg;\n\t break;\n\t default:\n\t if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n\t err ? extraArgs.push(arg) : err = arg;\n\t break;\n\t }\n\t extraArgs.push(arg);\n\t }\n\t }\n\t\n\t if (extraArgs.length > 0) {\n\t // if custom is an array this turns it into an object with integer keys\n\t custom = merge(custom);\n\t custom.extraArgs = extraArgs;\n\t }\n\t\n\t var item = {\n\t message: message,\n\t err: err,\n\t custom: custom,\n\t timestamp: now(),\n\t callback: callback,\n\t uuid: uuid4()\n\t };\n\t if (custom && custom.level !== undefined) {\n\t item.level = custom.level;\n\t delete custom.level;\n\t }\n\t if (requestKeys && request) {\n\t item.request = request;\n\t }\n\t if (lambdaContext) {\n\t item.lambdaContext = lambdaContext;\n\t }\n\t item._originalArgs = args;\n\t return item;\n\t}\n\t\n\tvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\n\tvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\t\n\tfunction arrayIncludes(arr, val) {\n\t for (var k = 0; k < arr.length; ++k) {\n\t if (arr[k] === val) {\n\t return true;\n\t }\n\t }\n\t\n\t return false;\n\t}\n\t\n\tfunction createTelemetryEvent(args) {\n\t var type, metadata, level;\n\t var arg;\n\t\n\t for (var i = 0, l = args.length; i < l; ++i) {\n\t arg = args[i];\n\t\n\t var typ = typeName(arg);\n\t switch (typ) {\n\t case 'string':\n\t if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n\t type = arg;\n\t } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n\t level = arg;\n\t }\n\t break;\n\t case 'object':\n\t metadata = arg;\n\t break;\n\t default:\n\t break;\n\t }\n\t }\n\t var event = {\n\t type: type || 'manual',\n\t metadata: metadata || {},\n\t level: level\n\t };\n\t\n\t return event;\n\t}\n\t\n\t/*\n\t * get - given an obj/array and a keypath, return the value at that keypath or\n\t * undefined if not possible.\n\t *\n\t * @param obj - an object or array\n\t * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n\t * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n\t */\n\tfunction get(obj, path) {\n\t if (!obj) {\n\t return undefined;\n\t }\n\t var keys = path.split('.');\n\t var result = obj;\n\t try {\n\t for (var i = 0, len = keys.length; i < len; ++i) {\n\t result = result[keys[i]];\n\t }\n\t } catch (e) {\n\t result = undefined;\n\t }\n\t return result;\n\t}\n\t\n\tfunction set(obj, path, value) {\n\t if (!obj) {\n\t return;\n\t }\n\t var keys = path.split('.');\n\t var len = keys.length;\n\t if (len < 1) {\n\t return;\n\t }\n\t if (len === 1) {\n\t obj[keys[0]] = value;\n\t return;\n\t }\n\t try {\n\t var temp = obj[keys[0]] || {};\n\t var replacement = temp;\n\t for (var i = 1; i < len - 1; ++i) {\n\t temp[keys[i]] = temp[keys[i]] || {};\n\t temp = temp[keys[i]];\n\t }\n\t temp[keys[len-1]] = value;\n\t obj[keys[0]] = replacement;\n\t } catch (e) {\n\t return;\n\t }\n\t}\n\t\n\tfunction scrub(data, scrubFields) {\n\t scrubFields = scrubFields || [];\n\t var paramRes = _getScrubFieldRegexs(scrubFields);\n\t var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\t\n\t function redactQueryParam(dummy0, paramPart) {\n\t return paramPart + redact();\n\t }\n\t\n\t function paramScrubber(v) {\n\t var i;\n\t if (isType(v, 'string')) {\n\t for (i = 0; i < queryRes.length; ++i) {\n\t v = v.replace(queryRes[i], redactQueryParam);\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function valScrubber(k, v) {\n\t var i;\n\t for (i = 0; i < paramRes.length; ++i) {\n\t if (paramRes[i].test(k)) {\n\t v = redact();\n\t break;\n\t }\n\t }\n\t return v;\n\t }\n\t\n\t function scrubber(k, v, seen) {\n\t var tmpV = valScrubber(k, v);\n\t if (tmpV === v) {\n\t if (isType(v, 'object') || isType(v, 'array')) {\n\t return traverse(v, scrubber, seen);\n\t }\n\t return paramScrubber(tmpV);\n\t } else {\n\t return tmpV;\n\t }\n\t }\n\t\n\t return traverse(data, scrubber, []);\n\t}\n\t\n\tfunction _getScrubFieldRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n\t ret.push(new RegExp(pat, 'i'));\n\t }\n\t return ret;\n\t}\n\t\n\t\n\tfunction _getScrubQueryParamRegexs(scrubFields) {\n\t var ret = [];\n\t var pat;\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n\t ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n\t }\n\t return ret;\n\t}\n\t\n\tfunction formatArgsAsString(args) {\n\t var i, len, arg;\n\t var result = [];\n\t for (i = 0, len = args.length; i < len; ++i) {\n\t arg = args[i];\n\t switch (typeName(arg)) {\n\t case 'object':\n\t arg = stringify(arg);\n\t arg = arg.error || arg.value;\n\t if (arg.length > 500) {\n\t arg = arg.substr(0, 497) + '...';\n\t }\n\t break;\n\t case 'null':\n\t arg = 'null';\n\t break;\n\t case 'undefined':\n\t arg = 'undefined';\n\t break;\n\t case 'symbol':\n\t arg = arg.toString();\n\t break;\n\t }\n\t result.push(arg);\n\t }\n\t return result.join(' ');\n\t}\n\t\n\tfunction now() {\n\t if (Date.now) {\n\t return +Date.now();\n\t }\n\t return +new Date();\n\t}\n\t\n\tfunction filterIp(requestData, captureIp) {\n\t if (!requestData || !requestData['user_ip'] || captureIp === true) {\n\t return;\n\t }\n\t var newIp = requestData['user_ip'];\n\t if (!captureIp) {\n\t newIp = null;\n\t } else {\n\t try {\n\t var parts;\n\t if (newIp.indexOf('.') !== -1) {\n\t parts = newIp.split('.');\n\t parts.pop();\n\t parts.push('0');\n\t newIp = parts.join('.');\n\t } else if (newIp.indexOf(':') !== -1) {\n\t parts = newIp.split(':');\n\t if (parts.length > 2) {\n\t var beginning = parts.slice(0, 3);\n\t var slashIdx = beginning[2].indexOf('/');\n\t if (slashIdx !== -1) {\n\t beginning[2] = beginning[2].substring(0, slashIdx);\n\t }\n\t var terminal = '0000:0000:0000:0000:0000';\n\t newIp = beginning.concat(terminal).join(':');\n\t }\n\t } else {\n\t newIp = null;\n\t }\n\t } catch (e) {\n\t newIp = null;\n\t }\n\t }\n\t requestData['user_ip'] = newIp;\n\t}\n\t\n\tfunction handleOptions(current, input, payload) {\n\t var result = merge(current, input, payload);\n\t if (!input || input.overwriteScrubFields) {\n\t return result;\n\t }\n\t if (input.scrubFields) {\n\t result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n\t createItem: createItem,\n\t createTelemetryEvent: createTelemetryEvent,\n\t filterIp: filterIp,\n\t formatArgsAsString: formatArgsAsString,\n\t formatUrl: formatUrl,\n\t get: get,\n\t handleOptions: handleOptions,\n\t isError: isError,\n\t isFunction: isFunction,\n\t isIterable: isIterable,\n\t isNativeFunction: isNativeFunction,\n\t isType: isType,\n\t jsonParse: jsonParse,\n\t LEVELS: LEVELS,\n\t makeUnhandledStackInfo: makeUnhandledStackInfo,\n\t merge: merge,\n\t now: now,\n\t redact: redact,\n\t sanitizeUrl: sanitizeUrl,\n\t scrub: scrub,\n\t set: set,\n\t stringify: stringify,\n\t traverse: traverse,\n\t typeName: typeName,\n\t uuid4: uuid4\n\t};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t'use strict';\n\t\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\t\n\tvar isPlainObject = function isPlainObject(obj) {\n\t\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\t\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t\t// Not own constructor property must be Object\n\t\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tvar key;\n\t\tfor (key in obj) {/**/}\n\t\n\t\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n\t};\n\t\n\tfunction merge() {\n\t var i, src, copy, clone, name,\n\t result = {},\n\t current = null,\n\t length = arguments.length;\n\t\n\t for (i=0; i < length; i++) {\n\t current = arguments[i];\n\t if (current == null) {\n\t continue;\n\t }\n\t\n\t for (name in current) {\n\t src = result[name];\n\t copy = current[name];\n\t if (result !== copy) {\n\t if (copy && isPlainObject(copy)) {\n\t clone = src && isPlainObject(src) ? src : {};\n\t result[name] = merge(clone, copy);\n\t } else if (typeof copy !== 'undefined') {\n\t result[name] = copy;\n\t }\n\t }\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = merge;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t// json3.js\n\t// 2017-02-21\n\t// Public Domain.\n\t// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\t// See http://www.JSON.org/js.html\n\t// This code should be minified before deployment.\n\t// See http://javascript.crockford.com/jsmin.html\n\t\n\t// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n\t// NOT CONTROL.\n\t\n\t// This file creates a global JSON object containing two methods: stringify\n\t// and parse. This file provides the ES5 JSON capability to ES3 systems.\n\t// If a project might run on IE8 or earlier, then this file should be included.\n\t// This file does nothing on ES5 systems.\n\t\n\t// JSON.stringify(value, replacer, space)\n\t// value any JavaScript value, usually an object or array.\n\t// replacer an optional parameter that determines how object\n\t// values are stringified for objects. It can be a\n\t// function or an array of strings.\n\t// space an optional parameter that specifies the indentation\n\t// of nested structures. If it is omitted, the text will\n\t// be packed without extra whitespace. If it is a number,\n\t// it will specify the number of spaces to indent at each\n\t// level. If it is a string (such as \"\\t\" or \" \"),\n\t// it contains the characters used to indent at each level.\n\t// This method produces a JSON text from a JavaScript value.\n\t// When an object value is found, if the object contains a toJSON\n\t// method, its toJSON method will be called and the result will be\n\t// stringified. A toJSON method does not serialize: it returns the\n\t// value represented by the name/value pair that should be serialized,\n\t// or undefined if nothing should be serialized. The toJSON method\n\t// will be passed the key associated with the value, and this will be\n\t// bound to the value.\n\t\n\t// For example, this would serialize Dates as ISO strings.\n\t\n\t// Date.prototype.toJSON = function (key) {\n\t// function f(n) {\n\t// // Format integers to have at least two digits.\n\t// return (n < 10)\n\t// ? \"0\" + n\n\t// : n;\n\t// }\n\t// return this.getUTCFullYear() + \"-\" +\n\t// f(this.getUTCMonth() + 1) + \"-\" +\n\t// f(this.getUTCDate()) + \"T\" +\n\t// f(this.getUTCHours()) + \":\" +\n\t// f(this.getUTCMinutes()) + \":\" +\n\t// f(this.getUTCSeconds()) + \"Z\";\n\t// };\n\t\n\t// You can provide an optional replacer method. It will be passed the\n\t// key and value of each member, with this bound to the containing\n\t// object. The value that is returned from your method will be\n\t// serialized. If your method returns undefined, then the member will\n\t// be excluded from the serialization.\n\t\n\t// If the replacer parameter is an array of strings, then it will be\n\t// used to select the members to be serialized. It filters the results\n\t// such that only members with keys listed in the replacer array are\n\t// stringified.\n\t\n\t// Values that do not have JSON representations, such as undefined or\n\t// functions, will not be serialized. Such values in objects will be\n\t// dropped; in arrays they will be replaced with null. You can use\n\t// a replacer function to replace those with JSON values.\n\t\n\t// JSON.stringify(undefined) returns undefined.\n\t\n\t// The optional space parameter produces a stringification of the\n\t// value that is filled with line breaks and indentation to make it\n\t// easier to read.\n\t\n\t// If the space parameter is a non-empty string, then that string will\n\t// be used for indentation. If the space parameter is a number, then\n\t// the indentation will be that many spaces.\n\t\n\t// Example:\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n\t// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\t\n\t// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n\t// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\t\n\t// text = JSON.stringify([new Date()], function (key, value) {\n\t// return this[key] instanceof Date\n\t// ? \"Date(\" + this[key] + \")\"\n\t// : value;\n\t// });\n\t// // text is '[\"Date(---current time---)\"]'\n\t\n\t// JSON.parse(text, reviver)\n\t// This method parses a JSON text to produce an object or array.\n\t// It can throw a SyntaxError exception.\n\t// This has been modified to use JSON-js/json_parse_state.js as the\n\t// parser instead of the one built around eval found in JSON-js/json2.js\n\t\n\t// The optional reviver parameter is a function that can filter and\n\t// transform the results. It receives each of the keys and values,\n\t// and its return value is used instead of the original value.\n\t// If it returns what it received, then the structure is not modified.\n\t// If it returns undefined then the member is deleted.\n\t\n\t// Example:\n\t\n\t// // Parse the text. Values that look like ISO date strings will\n\t// // be converted to Date objects.\n\t\n\t// myData = JSON.parse(text, function (key, value) {\n\t// var a;\n\t// if (typeof value === \"string\") {\n\t// a =\n\t// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n\t// if (a) {\n\t// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n\t// +a[5], +a[6]));\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n\t// var d;\n\t// if (typeof value === \"string\" &&\n\t// value.slice(0, 5) === \"Date(\" &&\n\t// value.slice(-1) === \")\") {\n\t// d = new Date(value.slice(5, -1));\n\t// if (d) {\n\t// return d;\n\t// }\n\t// }\n\t// return value;\n\t// });\n\t\n\t// This is a reference implementation. You are free to copy, modify, or\n\t// redistribute.\n\t\n\t/*jslint\n\t for, this\n\t */\n\t\n\t/*property\n\t JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n\t getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n\t lastIndex, length, parse, prototype, push, replace, slice, stringify,\n\t test, toJSON, toString, valueOf\n\t */\n\t\n\tvar setupCustomJSON = function(JSON) {\n\t\n\t var rx_one = /^[\\],:{}\\s]*$/;\n\t var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n\t var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n\t var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n\t var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\t\n\t function f(n) {\n\t // Format integers to have at least two digits.\n\t return n < 10\n\t ? \"0\" + n\n\t : n;\n\t }\n\t\n\t function this_value() {\n\t return this.valueOf();\n\t }\n\t\n\t if (typeof Date.prototype.toJSON !== \"function\") {\n\t\n\t Date.prototype.toJSON = function () {\n\t\n\t return isFinite(this.valueOf())\n\t ? this.getUTCFullYear() + \"-\" +\n\t f(this.getUTCMonth() + 1) + \"-\" +\n\t f(this.getUTCDate()) + \"T\" +\n\t f(this.getUTCHours()) + \":\" +\n\t f(this.getUTCMinutes()) + \":\" +\n\t f(this.getUTCSeconds()) + \"Z\"\n\t : null;\n\t };\n\t\n\t Boolean.prototype.toJSON = this_value;\n\t Number.prototype.toJSON = this_value;\n\t String.prototype.toJSON = this_value;\n\t }\n\t\n\t var gap;\n\t var indent;\n\t var meta;\n\t var rep;\n\t\n\t\n\t function quote(string) {\n\t\n\t // If the string contains no control characters, no quote characters, and no\n\t // backslash characters, then we can safely slap some quotes around it.\n\t // Otherwise we must also replace the offending characters with safe escape\n\t // sequences.\n\t\n\t rx_escapable.lastIndex = 0;\n\t return rx_escapable.test(string)\n\t ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n\t var c = meta[a];\n\t return typeof c === \"string\"\n\t ? c\n\t : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n\t }) + \"\\\"\"\n\t : \"\\\"\" + string + \"\\\"\";\n\t }\n\t\n\t\n\t function str(key, holder) {\n\t\n\t // Produce a string from holder[key].\n\t\n\t var i; // The loop counter.\n\t var k; // The member key.\n\t var v; // The member value.\n\t var length;\n\t var mind = gap;\n\t var partial;\n\t var value = holder[key];\n\t\n\t // If the value has a toJSON method, call it to obtain a replacement value.\n\t\n\t if (value && typeof value === \"object\" &&\n\t typeof value.toJSON === \"function\") {\n\t value = value.toJSON(key);\n\t }\n\t\n\t // If we were called with a replacer function, then call the replacer to\n\t // obtain a replacement value.\n\t\n\t if (typeof rep === \"function\") {\n\t value = rep.call(holder, key, value);\n\t }\n\t\n\t // What happens next depends on the value's type.\n\t\n\t switch (typeof value) {\n\t case \"string\":\n\t return quote(value);\n\t\n\t case \"number\":\n\t\n\t // JSON numbers must be finite. Encode non-finite numbers as null.\n\t\n\t return isFinite(value)\n\t ? String(value)\n\t : \"null\";\n\t\n\t case \"boolean\":\n\t case \"null\":\n\t\n\t // If the value is a boolean or null, convert it to a string. Note:\n\t // typeof null does not produce \"null\". The case is included here in\n\t // the remote chance that this gets fixed someday.\n\t\n\t return String(value);\n\t\n\t // If the type is \"object\", we might be dealing with an object or an array or\n\t // null.\n\t\n\t case \"object\":\n\t\n\t // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n\t // so watch out for that case.\n\t\n\t if (!value) {\n\t return \"null\";\n\t }\n\t\n\t // Make an array to hold the partial results of stringifying this object value.\n\t\n\t gap += indent;\n\t partial = [];\n\t\n\t // Is the value an array?\n\t\n\t if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\t\n\t // The value is an array. Stringify every element. Use null as a placeholder\n\t // for non-JSON values.\n\t\n\t length = value.length;\n\t for (i = 0; i < length; i += 1) {\n\t partial[i] = str(i, value) || \"null\";\n\t }\n\t\n\t // Join all of the elements together, separated with commas, and wrap them in\n\t // brackets.\n\t\n\t v = partial.length === 0\n\t ? \"[]\"\n\t : gap\n\t ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n\t : \"[\" + partial.join(\",\") + \"]\";\n\t gap = mind;\n\t return v;\n\t }\n\t\n\t // If the replacer is an array, use it to select the members to be stringified.\n\t\n\t if (rep && typeof rep === \"object\") {\n\t length = rep.length;\n\t for (i = 0; i < length; i += 1) {\n\t if (typeof rep[i] === \"string\") {\n\t k = rep[i];\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t } else {\n\t\n\t // Otherwise, iterate through all of the keys in the object.\n\t\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(value, k)) {\n\t v = str(k, value);\n\t if (v) {\n\t partial.push(quote(k) + (\n\t gap\n\t ? \": \"\n\t : \":\"\n\t ) + v);\n\t }\n\t }\n\t }\n\t }\n\t\n\t // Join all of the member texts together, separated with commas,\n\t // and wrap them in braces.\n\t\n\t v = partial.length === 0\n\t ? \"{}\"\n\t : gap\n\t ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n\t : \"{\" + partial.join(\",\") + \"}\";\n\t gap = mind;\n\t return v;\n\t }\n\t }\n\t\n\t // If the JSON object does not yet have a stringify method, give it one.\n\t\n\t if (typeof JSON.stringify !== \"function\") {\n\t meta = { // table of character substitutions\n\t \"\\b\": \"\\\\b\",\n\t \"\\t\": \"\\\\t\",\n\t \"\\n\": \"\\\\n\",\n\t \"\\f\": \"\\\\f\",\n\t \"\\r\": \"\\\\r\",\n\t \"\\\"\": \"\\\\\\\"\",\n\t \"\\\\\": \"\\\\\\\\\"\n\t };\n\t JSON.stringify = function (value, replacer, space) {\n\t\n\t // The stringify method takes a value and an optional replacer, and an optional\n\t // space parameter, and returns a JSON text. The replacer can be a function\n\t // that can replace values, or an array of strings that will select the keys.\n\t // A default replacer method can be provided. Use of the space parameter can\n\t // produce text that is more easily readable.\n\t\n\t var i;\n\t gap = \"\";\n\t indent = \"\";\n\t\n\t // If the space parameter is a number, make an indent string containing that\n\t // many spaces.\n\t\n\t if (typeof space === \"number\") {\n\t for (i = 0; i < space; i += 1) {\n\t indent += \" \";\n\t }\n\t\n\t // If the space parameter is a string, it will be used as the indent string.\n\t\n\t } else if (typeof space === \"string\") {\n\t indent = space;\n\t }\n\t\n\t // If there is a replacer, it must be a function or an array.\n\t // Otherwise, throw an error.\n\t\n\t rep = replacer;\n\t if (replacer && typeof replacer !== \"function\" &&\n\t (typeof replacer !== \"object\" ||\n\t typeof replacer.length !== \"number\")) {\n\t throw new Error(\"JSON.stringify\");\n\t }\n\t\n\t // Make a fake root object containing our value under the key of \"\".\n\t // Return the result of stringifying the value.\n\t\n\t return str(\"\", {\"\": value});\n\t };\n\t }\n\t\n\t\n\t // If the JSON object does not yet have a parse method, give it one.\n\t\n\t if (typeof JSON.parse !== \"function\") {\n\t JSON.parse = (function () {\n\t\n\t // This function creates a JSON parse function that uses a state machine rather\n\t // than the dangerous eval function to parse a JSON text.\n\t\n\t var state; // The state of the parser, one of\n\t // 'go' The starting state\n\t // 'ok' The final, accepting state\n\t // 'firstokey' Ready for the first key of the object or\n\t // the closing of an empty object\n\t // 'okey' Ready for the next key of the object\n\t // 'colon' Ready for the colon\n\t // 'ovalue' Ready for the value half of a key/value pair\n\t // 'ocomma' Ready for a comma or closing }\n\t // 'firstavalue' Ready for the first value of an array or\n\t // an empty array\n\t // 'avalue' Ready for the next value of an array\n\t // 'acomma' Ready for a comma or closing ]\n\t var stack; // The stack, for controlling nesting.\n\t var container; // The current container object or array\n\t var key; // The current key\n\t var value; // The current value\n\t var escapes = { // Escapement translation table\n\t \"\\\\\": \"\\\\\",\n\t \"\\\"\": \"\\\"\",\n\t \"/\": \"/\",\n\t \"t\": \"\\t\",\n\t \"n\": \"\\n\",\n\t \"r\": \"\\r\",\n\t \"f\": \"\\f\",\n\t \"b\": \"\\b\"\n\t };\n\t var string = { // The actions for string tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t firstokey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t okey: function () {\n\t key = value;\n\t state = \"colon\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var number = { // The actions for number tokens\n\t go: function () {\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t state = \"acomma\";\n\t }\n\t };\n\t var action = {\n\t\n\t // The action table describes the behavior of the machine. It contains an\n\t // object for each token. Each object contains a method that is called when\n\t // a token is matched in a state. An object will lack a method for illegal\n\t // states.\n\t\n\t \"{\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = {};\n\t state = \"firstokey\";\n\t }\n\t },\n\t \"}\": {\n\t firstokey: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t ocomma: function () {\n\t var pop = stack.pop();\n\t container[key] = value;\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \"[\": {\n\t go: function () {\n\t stack.push({state: \"ok\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t ovalue: function () {\n\t stack.push({container: container, state: \"ocomma\", key: key});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t firstavalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t },\n\t avalue: function () {\n\t stack.push({container: container, state: \"acomma\"});\n\t container = [];\n\t state = \"firstavalue\";\n\t }\n\t },\n\t \"]\": {\n\t firstavalue: function () {\n\t var pop = stack.pop();\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t },\n\t acomma: function () {\n\t var pop = stack.pop();\n\t container.push(value);\n\t value = container;\n\t container = pop.container;\n\t key = pop.key;\n\t state = pop.state;\n\t }\n\t },\n\t \":\": {\n\t colon: function () {\n\t if (Object.hasOwnProperty.call(container, key)) {\n\t throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n\t }\n\t state = \"ovalue\";\n\t }\n\t },\n\t \",\": {\n\t ocomma: function () {\n\t container[key] = value;\n\t state = \"okey\";\n\t },\n\t acomma: function () {\n\t container.push(value);\n\t state = \"avalue\";\n\t }\n\t },\n\t \"true\": {\n\t go: function () {\n\t value = true;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = true;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = true;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"false\": {\n\t go: function () {\n\t value = false;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = false;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = false;\n\t state = \"acomma\";\n\t }\n\t },\n\t \"null\": {\n\t go: function () {\n\t value = null;\n\t state = \"ok\";\n\t },\n\t ovalue: function () {\n\t value = null;\n\t state = \"ocomma\";\n\t },\n\t firstavalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t },\n\t avalue: function () {\n\t value = null;\n\t state = \"acomma\";\n\t }\n\t }\n\t };\n\t\n\t function debackslashify(text) {\n\t\n\t // Remove and replace any backslash escapement.\n\t\n\t return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n\t return b\n\t ? String.fromCharCode(parseInt(b, 16))\n\t : escapes[c];\n\t });\n\t }\n\t\n\t return function (source, reviver) {\n\t\n\t // A regular expression is used to extract tokens from the JSON text.\n\t // The extraction process is cautious.\n\t\n\t var result;\n\t var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\t\n\t // Set the starting state.\n\t\n\t state = \"go\";\n\t\n\t // The stack records the container, key, and state for each object or array\n\t // that contains another object or array while processing nested structures.\n\t\n\t stack = [];\n\t\n\t // If any error occurs, we will catch it and ultimately throw a syntax error.\n\t\n\t try {\n\t\n\t // For each token...\n\t\n\t while (true) {\n\t result = tx.exec(source);\n\t if (!result) {\n\t break;\n\t }\n\t\n\t // result is the result array from matching the tokenizing regular expression.\n\t // result[0] contains everything that matched, including any initial whitespace.\n\t // result[1] contains any punctuation that was matched, or true, false, or null.\n\t // result[2] contains a matched number, still in string form.\n\t // result[3] contains a matched string, without quotes but with escapement.\n\t\n\t if (result[1]) {\n\t\n\t // Token: Execute the action for this state and token.\n\t\n\t action[result[1]][state]();\n\t\n\t } else if (result[2]) {\n\t\n\t // Number token: Convert the number string into a number value and execute\n\t // the action for this state and number.\n\t\n\t value = +result[2];\n\t number[state]();\n\t } else {\n\t\n\t // String token: Replace the escapement sequences and execute the action for\n\t // this state and string.\n\t\n\t value = debackslashify(result[3]);\n\t string[state]();\n\t }\n\t\n\t // Remove the token from the string. The loop will continue as long as there\n\t // are tokens. This is a slow process, but it allows the use of ^ matching,\n\t // which assures that no illegal tokens slip through.\n\t\n\t source = source.slice(result[0].length);\n\t }\n\t\n\t // If we find a state/token combination that is illegal, then the action will\n\t // cause an error. We handle the error by simply changing the state.\n\t\n\t } catch (e) {\n\t state = e;\n\t }\n\t\n\t // The parsing is finished. If we are not in the final \"ok\" state, or if the\n\t // remaining source contains anything except whitespace, then we did not have\n\t //a well-formed JSON text.\n\t\n\t if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n\t throw (state instanceof SyntaxError)\n\t ? state\n\t : new SyntaxError(\"JSON\");\n\t }\n\t\n\t // If there is a reviver function, we recursively walk the new structure,\n\t // passing each name/value pair to the reviver function for possible\n\t // transformation, starting with a temporary root object that holds the current\n\t // value in an empty key. If there is not a reviver function, we simply return\n\t // that value.\n\t\n\t return (typeof reviver === \"function\")\n\t ? (function walk(holder, key) {\n\t var k;\n\t var v;\n\t var val = holder[key];\n\t if (val && typeof val === \"object\") {\n\t for (k in value) {\n\t if (Object.prototype.hasOwnProperty.call(val, k)) {\n\t v = walk(val, k);\n\t if (v !== undefined) {\n\t val[k] = v;\n\t } else {\n\t delete val[k];\n\t }\n\t }\n\t }\n\t }\n\t return reviver.call(holder, key, val);\n\t }({\"\": value}, \"\"))\n\t : value;\n\t };\n\t }());\n\t }\n\t}\n\t\n\tmodule.exports = setupCustomJSON;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n\t * This object handles rate limiting via a passed in rate limiter, retries based on connection\n\t * errors, and filtering of items based on a set of configurable predicates. The communication to\n\t * the backend is performed via a given API object.\n\t *\n\t * @param rateLimiter - An object which conforms to the interface\n\t * rateLimiter.shouldSend(item) -> bool\n\t * @param api - An object which conforms to the interface\n\t * api.postItem(payload, function(err, response))\n\t * @param logger - An object used to log verbose messages if desired\n\t * @param options - see Queue.prototype.configure\n\t */\n\tfunction Queue(rateLimiter, api, logger, options) {\n\t this.rateLimiter = rateLimiter;\n\t this.api = api;\n\t this.logger = logger;\n\t this.options = options;\n\t this.predicates = [];\n\t this.pendingItems = [];\n\t this.pendingRequests = [];\n\t this.retryQueue = [];\n\t this.retryHandle = null;\n\t this.waitCallback = null;\n\t this.waitIntervalID = null;\n\t}\n\t\n\t/*\n\t * configure - updates the options this queue uses\n\t *\n\t * @param options\n\t */\n\tQueue.prototype.configure = function(options) {\n\t this.api && this.api.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addPredicate - adds a predicate to the end of the list of predicates for this queue\n\t *\n\t * @param predicate - function(item, options) -> (bool|{err: Error})\n\t * Returning true means that this predicate passes and the item is okay to go on the queue\n\t * Returning false means do not add the item to the queue, but it is not an error\n\t * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n\t * Returning {err: undefined} is equivalent to returning true but don't do that\n\t */\n\tQueue.prototype.addPredicate = function(predicate) {\n\t if (_.isFunction(predicate)) {\n\t this.predicates.push(predicate);\n\t }\n\t return this;\n\t};\n\t\n\tQueue.prototype.addPendingItem = function(item) {\n\t this.pendingItems.push(item);\n\t};\n\t\n\tQueue.prototype.removePendingItem = function(item) {\n\t var idx = this.pendingItems.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingItems.splice(idx, 1);\n\t }\n\t};\n\t\n\t/*\n\t * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n\t *\n\t * @param item - The payload to send to the backend\n\t * @param callback - function(error, repsonse) which will be called with the response from the API\n\t * in the case of a success, otherwise response will be null and error will have a value. If both\n\t * error and response are null then the item was stopped by a predicate which did not consider this\n\t * to be an error condition, but nonetheless did not send the item to the API.\n\t * @param originalError - The original error before any transformations that is to be logged if any\n\t */\n\tQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() { return; };\n\t }\n\t var predicateResult = this._applyPredicates(item);\n\t if (predicateResult.stop) {\n\t this.removePendingItem(originalItem);\n\t callback(predicateResult.err);\n\t return;\n\t }\n\t this._maybeLog(item, originalError);\n\t this.removePendingItem(originalItem);\n\t this.pendingRequests.push(item);\n\t try {\n\t this._makeApiRequest(item, function(err, resp) {\n\t this._dequeuePendingRequest(item);\n\t callback(err, resp);\n\t }.bind(this));\n\t } catch (e) {\n\t this._dequeuePendingRequest(item);\n\t callback(e);\n\t }\n\t};\n\t\n\t/*\n\t * wait - Stop any further errors from being added to the queue, and get called back when all items\n\t * currently processing have finished sending to the backend.\n\t *\n\t * @param callback - function() called when all pending items have been sent\n\t */\n\tQueue.prototype.wait = function(callback) {\n\t if (!_.isFunction(callback)) {\n\t return;\n\t }\n\t this.waitCallback = callback;\n\t if (this._maybeCallWait()) {\n\t return;\n\t }\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitIntervalID = setInterval(function() {\n\t this._maybeCallWait();\n\t }.bind(this), 500);\n\t};\n\t\n\t/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n\t * given item with the currently configured options.\n\t *\n\t * @param item - An item in the queue\n\t * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n\t * the error value should be passed up to a callbak if we are stopping.\n\t */\n\tQueue.prototype._applyPredicates = function(item) {\n\t var p = null;\n\t for (var i = 0, len = this.predicates.length; i < len; i++) {\n\t p = this.predicates[i](item, this.options);\n\t if (!p || p.err !== undefined) {\n\t return {stop: true, err: p.err};\n\t }\n\t }\n\t return {stop: false, err: null};\n\t};\n\t\n\t/*\n\t * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n\t * effort to retry if we are configured to do so.\n\t *\n\t * @param item - an item ready to send to the backend\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._makeApiRequest = function(item, callback) {\n\t var rateLimitResponse = this.rateLimiter.shouldSend(item);\n\t if (rateLimitResponse.shouldSend) {\n\t this.api.postItem(item, function(err, resp) {\n\t if (err) {\n\t this._maybeRetry(err, item, callback);\n\t } else {\n\t callback(err, resp);\n\t }\n\t }.bind(this));\n\t } else if (rateLimitResponse.error) {\n\t callback(rateLimitResponse.error);\n\t } else {\n\t this.api.postItem(rateLimitResponse.payload, callback);\n\t }\n\t};\n\t\n\t// These are errors basically mean there is no internet connection\n\tvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\t\n\t/*\n\t * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n\t * with the error.\n\t *\n\t * @param err - an error returned by the API transport\n\t * @param item - the item that was trying to be sent when this error occured\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._maybeRetry = function(err, item, callback) {\n\t var shouldRetry = false;\n\t if (this.options.retryInterval) {\n\t for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n\t if (err.code === RETRIABLE_ERRORS[i]) {\n\t shouldRetry = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (shouldRetry) {\n\t this._retryApiRequest(item, callback);\n\t } else {\n\t callback(err);\n\t }\n\t};\n\t\n\t/*\n\t * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n\t * that queue based on the retryInterval in the options for this queue.\n\t *\n\t * @param item - an item that failed to send due to an error we deem retriable\n\t * @param callback - function(err, response)\n\t */\n\tQueue.prototype._retryApiRequest = function(item, callback) {\n\t this.retryQueue.push({item: item, callback: callback});\n\t\n\t if (!this.retryHandle) {\n\t this.retryHandle = setInterval(function() {\n\t while (this.retryQueue.length) {\n\t var retryObject = this.retryQueue.shift();\n\t this._makeApiRequest(retryObject.item, retryObject.callback);\n\t }\n\t }.bind(this), this.options.retryInterval);\n\t }\n\t};\n\t\n\t/*\n\t * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n\t * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n\t * when the pending request queue has been emptied. This must be called when the API finishes\n\t * processing this item. If a `wait` callback is configured, it is called by this function.\n\t *\n\t * @param item - the item previously added to the pending request queue\n\t */\n\tQueue.prototype._dequeuePendingRequest = function(item) {\n\t var idx = this.pendingRequests.indexOf(item);\n\t if (idx !== -1) {\n\t this.pendingRequests.splice(idx, 1);\n\t this._maybeCallWait();\n\t }\n\t};\n\t\n\tQueue.prototype._maybeLog = function(data, originalError) {\n\t if (this.logger && this.options.verbose) {\n\t var message = originalError;\n\t message = message || _.get(data, 'body.trace.exception.message');\n\t message = message || _.get(data, 'body.trace_chain.0.exception.message');\n\t if (message) {\n\t this.logger.error(message);\n\t return;\n\t }\n\t message = _.get(data, 'body.message.body');\n\t if (message) {\n\t this.logger.log(message);\n\t }\n\t }\n\t};\n\t\n\tQueue.prototype._maybeCallWait = function() {\n\t if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n\t if (this.waitIntervalID) {\n\t this.waitIntervalID = clearInterval(this.waitIntervalID);\n\t }\n\t this.waitCallback();\n\t return true;\n\t }\n\t return false;\n\t};\n\t\n\tmodule.exports = Queue;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\t/*\n\t * Notifier - the internal object responsible for delegating between the client exposed API, the\n\t * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n\t * queue which handles the communcation with the Rollbar API servers.\n\t *\n\t * @param queue - an object that conforms to the interface: addItem(item, callback)\n\t * @param options - an object representing the options to be set for this notifier, this should have\n\t * any defaults already set by the caller\n\t */\n\tfunction Notifier(queue, options) {\n\t this.queue = queue;\n\t this.options = options;\n\t this.transforms = [];\n\t}\n\t\n\t/*\n\t * configure - updates the options for this notifier with the passed in object\n\t *\n\t * @param options - an object which gets merged with the current options set on this notifier\n\t * @returns this\n\t */\n\tNotifier.prototype.configure = function(options) {\n\t this.queue && this.queue.configure(options);\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t return this;\n\t};\n\t\n\t/*\n\t * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n\t *\n\t * @param transform - a function which takes three arguments:\n\t * * item: An Object representing the data to eventually be sent to Rollbar\n\t * * options: The current value of the options for this notifier\n\t * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n\t * callback with a null value for error if it wants the processing chain to continue, otherwise\n\t * with an error to terminate the processing. The item should be the updated item after this\n\t * transform is finished modifying it.\n\t */\n\tNotifier.prototype.addTransform = function(transform) {\n\t if (_.isFunction(transform)) {\n\t this.transforms.push(transform);\n\t }\n\t return this;\n\t};\n\t\n\t/*\n\t * log - the internal log function which applies the configured transforms and then pushes onto the\n\t * queue to be sent to the backend.\n\t *\n\t * @param item - An object with the following structure:\n\t * message [String] - An optional string to be sent to rollbar\n\t * error [Error] - An optional error\n\t *\n\t * @param callback - A function of type function(err, resp) which will be called with exactly one\n\t * null argument and one non-null argument. The callback will be called once, either during the\n\t * transform stage if an error occurs inside a transform, or in response to the communication with\n\t * the backend. The second argument will be the response from the backend in case of success.\n\t */\n\tNotifier.prototype.log = function(item, callback) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!this.options.enabled) {\n\t return callback(new Error('Rollbar is not enabled'));\n\t }\n\t\n\t this.queue.addPendingItem(item);\n\t var originalError = item.err;\n\t this._applyTransforms(item, function(err, i) {\n\t if (err) {\n\t this.queue.removePendingItem(item);\n\t return callback(err, null);\n\t }\n\t this.queue.addItem(i, callback, originalError, item);\n\t }.bind(this));\n\t};\n\t\n\t/* Internal */\n\t\n\t/*\n\t * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n\t * `addTransform` for more information.\n\t *\n\t * @param item - An item to be transformed\n\t * @param callback - A function of type function(err, item) which will be called with a non-null\n\t * error and a null item in the case of a transform failure, or a null error and non-null item after\n\t * all transforms have been applied.\n\t */\n\tNotifier.prototype._applyTransforms = function(item, callback) {\n\t var transformIndex = -1;\n\t var transformsLength = this.transforms.length;\n\t var transforms = this.transforms;\n\t var options = this.options;\n\t\n\t var cb = function(err, i) {\n\t if (err) {\n\t callback(err, null);\n\t return;\n\t }\n\t\n\t transformIndex++;\n\t\n\t if (transformIndex === transformsLength) {\n\t callback(null, i);\n\t return;\n\t }\n\t\n\t transforms[transformIndex](i, options, cb);\n\t };\n\t\n\t cb(null, item);\n\t};\n\t\n\tmodule.exports = Notifier;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tvar MAX_EVENTS = 100;\n\t\n\tfunction Telemeter(options) {\n\t this.queue = [];\n\t this.options = _.merge(options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t}\n\t\n\tTelemeter.prototype.configure = function(options) {\n\t var oldOptions = this.options;\n\t this.options = _.merge(oldOptions, options);\n\t var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n\t var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n\t var deleteCount = 0;\n\t if (this.maxQueueSize > newMaxEvents) {\n\t deleteCount = this.maxQueueSize - newMaxEvents;\n\t }\n\t this.maxQueueSize = newMaxEvents;\n\t this.queue.splice(0, deleteCount);\n\t};\n\t\n\tTelemeter.prototype.copyEvents = function() {\n\t var events = Array.prototype.slice.call(this.queue, 0);\n\t if (_.isFunction(this.options.filterTelemetry)) {\n\t try {\n\t var i = events.length;\n\t while (i--) {\n\t if (this.options.filterTelemetry(events[i])) {\n\t events.splice(i, 1);\n\t }\n\t }\n\t } catch (e) {\n\t this.options.filterTelemetry = null;\n\t }\n\t }\n\t return events;\n\t};\n\t\n\tTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n\t var e = {\n\t level: getLevel(type, level),\n\t type: type,\n\t timestamp_ms: timestamp || _.now(),\n\t body: metadata,\n\t source: 'client'\n\t };\n\t if (rollbarUUID) {\n\t e.uuid = rollbarUUID;\n\t }\n\t\n\t try {\n\t if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n\t return false;\n\t }\n\t } catch (exc) {\n\t this.options.filterTelemetry = null;\n\t }\n\t\n\t this.push(e);\n\t return e;\n\t};\n\t\n\tTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n\t return this.capture(type, metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n\t var metadata = {\n\t message: err.message || String(err)\n\t };\n\t if (err.stack) {\n\t metadata.stack = err.stack;\n\t }\n\t return this.capture('error', metadata, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n\t return this.capture('log', {\n\t message: message\n\t }, level, rollbarUUID, timestamp);\n\t};\n\t\n\tTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n\t subtype = subtype || 'xhr';\n\t metadata.subtype = metadata.subtype || subtype;\n\t if (requestData) {\n\t metadata.request = requestData;\n\t }\n\t var level = this.levelFromStatus(metadata.status_code);\n\t return this.capture('network', metadata, level, rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.levelFromStatus = function(statusCode) {\n\t if (statusCode >= 200 && statusCode < 400) {\n\t return 'info';\n\t }\n\t if (statusCode === 0 || statusCode >= 400) {\n\t return 'error';\n\t }\n\t return 'info';\n\t};\n\t\n\tTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n\t var metadata = {\n\t subtype: subtype,\n\t element: element\n\t };\n\t if (value !== undefined) {\n\t metadata.value = value;\n\t }\n\t if (checked !== undefined) {\n\t metadata.checked = checked;\n\t }\n\t return this.capture('dom', metadata, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n\t return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n\t};\n\t\n\tTelemeter.prototype.captureDomContentLoaded = function(ts) {\n\t return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\tTelemeter.prototype.captureLoad = function(ts) {\n\t return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t /**\n\t * If we decide to make this a dom event instead, then use the line below:\n\t return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n\t */\n\t};\n\t\n\tTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n\t return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n\t};\n\t\n\t// Only intended to be used internally by the notifier\n\tTelemeter.prototype._captureRollbarItem = function(item) {\n\t if (!this.options.includeItemsInTelemetry) {\n\t return;\n\t }\n\t if (item.err) {\n\t return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.message) {\n\t return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n\t }\n\t if (item.custom) {\n\t return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n\t }\n\t};\n\t\n\tTelemeter.prototype.push = function(e) {\n\t this.queue.push(e);\n\t if (this.queue.length > this.maxQueueSize) {\n\t this.queue.shift();\n\t }\n\t};\n\t\n\tfunction getLevel(type, level) {\n\t if (level) {\n\t return level;\n\t }\n\t var defaultLevel = {\n\t error: 'error',\n\t manual: 'info'\n\t };\n\t return defaultLevel[type] || 'info';\n\t}\n\t\n\tmodule.exports = Telemeter;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar helpers = __webpack_require__(12);\n\tvar truncation = __webpack_require__(13);\n\t\n\tvar defaultOptions = {\n\t hostname: 'api.rollbar.com',\n\t path: '/api/1/item/',\n\t search: null,\n\t version: '1',\n\t protocol: 'https:',\n\t port: 443\n\t};\n\t\n\t/**\n\t * Api is an object that encapsulates methods of communicating with\n\t * the Rollbar API. It is a standard interface with some parts implemented\n\t * differently for server or browser contexts. It is an object that should\n\t * be instantiated when used so it can contain non-global options that may\n\t * be different for another instance of RollbarApi.\n\t *\n\t * @param options {\n\t * accessToken: the accessToken to use for posting items to rollbar\n\t * endpoint: an alternative endpoint to send errors to\n\t * must be a valid, fully qualified URL.\n\t * The default is: https://api.rollbar.com/api/1/item\n\t * proxy: if you wish to proxy requests provide an object\n\t * with the following keys:\n\t * host or hostname (required): foo.example.com\n\t * port (optional): 123\n\t * protocol (optional): https\n\t * }\n\t */\n\tfunction Api(options, t, u, j) {\n\t this.options = options;\n\t this.transport = t;\n\t this.url = u;\n\t this.jsonBackup = j;\n\t this.accessToken = options.accessToken;\n\t this.transportOptions = _getTransport(options, u);\n\t}\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.postItem = function(data, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t this.transport.post(this.accessToken, transportOptions, payload, callback);\n\t};\n\t\n\t/**\n\t *\n\t * @param data\n\t * @param callback\n\t */\n\tApi.prototype.buildJsonPayload = function(data, callback) {\n\t var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t if (callback) {\n\t callback(stringifyResult.error);\n\t }\n\t return null;\n\t }\n\t\n\t return stringifyResult.value;\n\t};\n\t\n\t/**\n\t *\n\t * @param jsonPayload\n\t * @param callback\n\t */\n\tApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n\t var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n\t this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n\t};\n\t\n\tApi.prototype.configure = function(options) {\n\t var oldOptions = this.oldOptions;\n\t this.options = _.merge(oldOptions, options);\n\t this.transportOptions = _getTransport(this.options, this.url);\n\t if (this.options.accessToken !== undefined) {\n\t this.accessToken = this.options.accessToken;\n\t }\n\t return this;\n\t};\n\t\n\tfunction _getTransport(options, url) {\n\t return helpers.getTransportFromOptions(options, defaultOptions, url);\n\t}\n\t\n\tmodule.exports = Api;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction buildPayload(accessToken, data, jsonBackup) {\n\t if (!_.isType(data.context, 'string')) {\n\t var contextResult = _.stringify(data.context, jsonBackup);\n\t if (contextResult.error) {\n\t data.context = 'Error: could not serialize \\'context\\'';\n\t } else {\n\t data.context = contextResult.value || '';\n\t }\n\t if (data.context.length > 255) {\n\t data.context = data.context.substr(0, 255);\n\t }\n\t }\n\t return {\n\t access_token: accessToken,\n\t data: data\n\t };\n\t}\n\t\n\tfunction getTransportFromOptions(options, defaults, url) {\n\t var hostname = defaults.hostname;\n\t var protocol = defaults.protocol;\n\t var port = defaults.port;\n\t var path = defaults.path;\n\t var search = defaults.search;\n\t\n\t var proxy = options.proxy;\n\t if (options.endpoint) {\n\t var opts = url.parse(options.endpoint);\n\t hostname = opts.hostname;\n\t protocol = opts.protocol;\n\t port = opts.port;\n\t path = opts.pathname;\n\t search = opts.search;\n\t }\n\t return {\n\t hostname: hostname,\n\t protocol: protocol,\n\t port: port,\n\t path: path,\n\t search: search,\n\t proxy: proxy\n\t };\n\t}\n\t\n\tfunction transportOptions(transport, method) {\n\t var protocol = transport.protocol || 'https:';\n\t var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n\t var hostname = transport.hostname;\n\t var path = transport.path;\n\t if (transport.search) {\n\t path = path + transport.search;\n\t }\n\t if (transport.proxy) {\n\t path = protocol + '//' + hostname + path;\n\t hostname = transport.proxy.host || transport.proxy.hostname;\n\t port = transport.proxy.port;\n\t protocol = transport.proxy.protocol || protocol;\n\t }\n\t return {\n\t protocol: protocol,\n\t hostname: hostname,\n\t path: path,\n\t port: port,\n\t method: method\n\t };\n\t}\n\t\n\tfunction appendPathToPath(base, path) {\n\t var baseTrailingSlash = /\\/$/.test(base);\n\t var pathBeginningSlash = /^\\//.test(path);\n\t\n\t if (baseTrailingSlash && pathBeginningSlash) {\n\t path = path.substring(1);\n\t } else if (!baseTrailingSlash && !pathBeginningSlash) {\n\t path = '/' + path;\n\t }\n\t\n\t return base + path;\n\t}\n\t\n\tmodule.exports = {\n\t buildPayload: buildPayload,\n\t getTransportFromOptions: getTransportFromOptions,\n\t transportOptions: transportOptions,\n\t appendPathToPath: appendPathToPath\n\t};\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction raw(payload, jsonBackup) {\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction selectFrames(frames, range) {\n\t var len = frames.length;\n\t if (len > range * 2) {\n\t return frames.slice(0, range).concat(frames.slice(len - range));\n\t }\n\t return frames;\n\t}\n\t\n\tfunction truncateFrames(payload, jsonBackup, range) {\n\t range = (typeof range === 'undefined') ? 30 : range;\n\t var body = payload.data.body;\n\t var frames;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t frames = chain[i].frames;\n\t frames = selectFrames(frames, range);\n\t chain[i].frames = frames;\n\t }\n\t } else if (body.trace) {\n\t frames = body.trace.frames;\n\t frames = selectFrames(frames, range);\n\t body.trace.frames = frames;\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction maybeTruncateValue(len, val) {\n\t if (!val) {\n\t return val;\n\t }\n\t if (val.length > len) {\n\t return val.slice(0, len - 3).concat('...');\n\t }\n\t return val;\n\t}\n\t\n\tfunction truncateStrings(len, payload, jsonBackup) {\n\t function truncator(k, v, seen) {\n\t switch (_.typeName(v)) {\n\t case 'string':\n\t return maybeTruncateValue(len, v);\n\t case 'object':\n\t case 'array':\n\t return _.traverse(v, truncator, seen);\n\t default:\n\t return v;\n\t }\n\t }\n\t payload = _.traverse(payload, truncator, []);\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction truncateTraceData(traceData) {\n\t if (traceData.exception) {\n\t delete traceData.exception.description;\n\t traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n\t }\n\t traceData.frames = selectFrames(traceData.frames, 1);\n\t return traceData;\n\t}\n\t\n\tfunction minBody(payload, jsonBackup) {\n\t var body = payload.data.body;\n\t if (body.trace_chain) {\n\t var chain = body.trace_chain;\n\t for (var i = 0; i < chain.length; i++) {\n\t chain[i] = truncateTraceData(chain[i]);\n\t }\n\t } else if (body.trace) {\n\t body.trace = truncateTraceData(body.trace);\n\t }\n\t return [payload, _.stringify(payload, jsonBackup)];\n\t}\n\t\n\tfunction needsTruncation(payload, maxSize) {\n\t return payload.length > maxSize;\n\t}\n\t\n\tfunction truncate(payload, jsonBackup, maxSize) {\n\t maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n\t var strategies = [\n\t raw,\n\t truncateFrames,\n\t truncateStrings.bind(null, 1024),\n\t truncateStrings.bind(null, 512),\n\t truncateStrings.bind(null, 256),\n\t minBody\n\t ];\n\t var strategy, results, result;\n\t\n\t while ((strategy = strategies.shift())) {\n\t results = strategy(payload, jsonBackup);\n\t payload = results[0];\n\t result = results[1];\n\t if (result.error || !needsTruncation(result.value, maxSize)) {\n\t return result;\n\t }\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t truncate: truncate,\n\t\n\t /* for testing */\n\t raw: raw,\n\t truncateFrames: truncateFrames,\n\t truncateStrings: truncateStrings,\n\t maybeTruncateValue: maybeTruncateValue\n\t};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/* eslint-disable no-console */\n\t__webpack_require__(15);\n\tvar detection = __webpack_require__(16);\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction error() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.error(_.formatArgsAsString(args));\n\t } else {\n\t console.error.apply(console, args);\n\t }\n\t}\n\t\n\tfunction info() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.info(_.formatArgsAsString(args));\n\t } else {\n\t console.info.apply(console, args);\n\t }\n\t}\n\t\n\tfunction log() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t args.unshift('Rollbar:');\n\t if (detection.ieVersion() <= 8) {\n\t console.log(_.formatArgsAsString(args));\n\t } else {\n\t console.log.apply(console, args);\n\t }\n\t}\n\t\n\t/* eslint-enable no-console */\n\t\n\tmodule.exports = {\n\t error: error,\n\t info: info,\n\t log: log\n\t};\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t// Console-polyfill. MIT license.\n\t// https://github.com/paulmillr/console-polyfill\n\t// Make it safe to do console.log() always.\n\t(function(global) {\n\t 'use strict';\n\t if (!global.console) {\n\t global.console = {};\n\t }\n\t var con = global.console;\n\t var prop, method;\n\t var dummy = function() {};\n\t var properties = ['memory'];\n\t var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n\t 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n\t 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n\t while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n\t while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n\t // Using `this` for web workers & supports Browserify / Webpack.\n\t})(typeof window === 'undefined' ? this : window);\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// This detection.js module is used to encapsulate any ugly browser/feature\n\t// detection we may need to do.\n\t\n\t// Figure out which version of IE we're using, if any.\n\t// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n\t// Will return an integer on IE (i.e. 8)\n\t// Will return undefined otherwise\n\tfunction getIEVersion() {\n\t\tvar undef;\n\t\tif (!document) {\n\t\t\treturn undef;\n\t\t}\n\t\n\t var v = 3,\n\t div = document.createElement('div'),\n\t all = div.getElementsByTagName('i');\n\t\n\t while (\n\t div.innerHTML = '',\n\t all[0]\n\t );\n\t\n\t return v > 4 ? v : undef;\n\t}\n\t\n\tvar Detection = {\n\t ieVersion: getIEVersion\n\t};\n\t\n\tmodule.exports = Detection;\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction captureUncaughtExceptions(window, handler, shim) {\n\t if (!window) { return; }\n\t var oldOnError;\n\t\n\t if (typeof handler._rollbarOldOnError === 'function') {\n\t oldOnError = handler._rollbarOldOnError;\n\t } else if (window.onerror) {\n\t oldOnError = window.onerror;\n\t while (oldOnError._rollbarOldOnError) {\n\t oldOnError = oldOnError._rollbarOldOnError;\n\t }\n\t handler._rollbarOldOnError = oldOnError;\n\t }\n\t\n\t var fn = function() {\n\t var args = Array.prototype.slice.call(arguments, 0);\n\t _rollbarWindowOnError(window, handler, oldOnError, args);\n\t };\n\t if (shim) {\n\t fn._rollbarOldOnError = oldOnError;\n\t }\n\t window.onerror = fn;\n\t}\n\t\n\tfunction _rollbarWindowOnError(window, r, old, args) {\n\t if (window._rollbarWrappedError) {\n\t if (!args[4]) {\n\t args[4] = window._rollbarWrappedError;\n\t }\n\t if (!args[5]) {\n\t args[5] = window._rollbarWrappedError._rollbarContext;\n\t }\n\t window._rollbarWrappedError = null;\n\t }\n\t\n\t r.handleUncaughtException.apply(r, args);\n\t if (old) {\n\t old.apply(window, args);\n\t }\n\t}\n\t\n\tfunction captureUnhandledRejections(window, handler, shim) {\n\t if (!window) { return; }\n\t\n\t if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n\t window.removeEventListener('unhandledrejection', window._rollbarURH);\n\t }\n\t\n\t var rejectionHandler = function (evt) {\n\t var reason, promise, detail;\n\t try {\n\t reason = evt.reason;\n\t } catch (e) {\n\t reason = undefined;\n\t }\n\t try {\n\t promise = evt.promise;\n\t } catch (e) {\n\t promise = '[unhandledrejection] error getting `promise` from event';\n\t }\n\t try {\n\t detail = evt.detail;\n\t if (!reason && detail) {\n\t reason = detail.reason;\n\t promise = detail.promise;\n\t }\n\t } catch (e) {\n\t // Ignore\n\t }\n\t if (!reason) {\n\t reason = '[unhandledrejection] error getting `reason` from event';\n\t }\n\t\n\t if (handler && handler.handleUnhandledRejection) {\n\t handler.handleUnhandledRejection(reason, promise);\n\t }\n\t };\n\t rejectionHandler.belongsToShim = shim;\n\t window._rollbarURH = rejectionHandler;\n\t window.addEventListener('unhandledrejection', rejectionHandler);\n\t}\n\t\n\tfunction wrapGlobals(window, handler, shim) {\n\t if (!window) { return; }\n\t // Adapted from https://github.com/bugsnag/bugsnag-js\n\t var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n\t var i, global;\n\t for (i = 0; i < globals.length; ++i) {\n\t global = globals[i];\n\t\n\t if (window[global] && window[global].prototype) {\n\t _extendListenerPrototype(handler, window[global].prototype, shim);\n\t }\n\t }\n\t}\n\t\n\tfunction _extendListenerPrototype(handler, prototype, shim) {\n\t if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n\t var oldAddEventListener = prototype.addEventListener;\n\t while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n\t oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n\t }\n\t var addFn = function(event, callback, bubble) {\n\t oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n\t };\n\t addFn._rollbarOldAdd = oldAddEventListener;\n\t addFn.belongsToShim = shim;\n\t prototype.addEventListener = addFn;\n\t\n\t var oldRemoveEventListener = prototype.removeEventListener;\n\t while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n\t oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n\t }\n\t var removeFn = function(event, callback, bubble) {\n\t oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n\t };\n\t removeFn._rollbarOldRemove = oldRemoveEventListener;\n\t removeFn.belongsToShim = shim;\n\t prototype.removeEventListener = removeFn;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t captureUncaughtExceptions: captureUncaughtExceptions,\n\t captureUnhandledRejections: captureUnhandledRejections,\n\t wrapGlobals: wrapGlobals\n\t};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/*global XDomainRequest*/\n\t\n\tvar _ = __webpack_require__(5);\n\tvar truncation = __webpack_require__(13);\n\tvar logger = __webpack_require__(14);\n\t\n\t/*\n\t * accessToken may be embedded in payload but that should not\n\t * be assumed\n\t *\n\t * options: {\n\t * hostname\n\t * protocol\n\t * path\n\t * port\n\t * method\n\t * }\n\t *\n\t * params is an object containing key/value pairs. These\n\t * will be appended to the path as 'key=value&key=value'\n\t *\n\t * payload is an unserialized object\n\t */\n\t\n\tfunction get(accessToken, options, params, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\t\n\t var method = 'GET';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n\t}\n\t\n\tfunction post(accessToken, options, payload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t if (!payload) {\n\t return callback(new Error('Cannot send empty request'));\n\t }\n\t\n\t var stringifyResult = truncation.truncate(payload);\n\t if (stringifyResult.error) {\n\t return callback(stringifyResult.error);\n\t }\n\t\n\t var writeData = stringifyResult.value;\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n\t}\n\t\n\tfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n\t if (!callback || !_.isFunction(callback)) {\n\t callback = function() {};\n\t }\n\t\n\t var method = 'POST';\n\t var url = _.formatUrl(options);\n\t _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n\t}\n\t\n\t// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n\t// so Angular change detection isn't triggered on each API call.\n\t// This is the equivalent of runOutsideAngular().\n\t//\n\tfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n\t var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n\t var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\t\n\t if (currentZone && currentZone._name === 'angular') {\n\t var rootZone = currentZone._parent;\n\t rootZone.run(function () {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t });\n\t } else {\n\t _makeRequest(accessToken, url, method, data, callback, requestFactory);\n\t }\n\t}\n\t\n\t/* global RollbarProxy */\n\tfunction _proxyRequest(json, callback) {\n\t var rollbarProxy = new RollbarProxy();\n\t rollbarProxy.sendJsonPayload(\n\t json,\n\t function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n\t function(err) {\n\t callback(new Error(err));\n\t }\n\t );\n\t}\n\t\n\tfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n\t if (typeof RollbarProxy !== 'undefined') {\n\t return _proxyRequest(data, callback);\n\t }\n\t\n\t var request;\n\t if (requestFactory) {\n\t request = requestFactory();\n\t } else {\n\t request = _createXMLHTTPObject();\n\t }\n\t if (!request) {\n\t // Give up, no way to send requests\n\t return callback(new Error('No way to send a request'));\n\t }\n\t try {\n\t try {\n\t var onreadystatechange = function() {\n\t try {\n\t if (onreadystatechange && request.readyState === 4) {\n\t onreadystatechange = undefined;\n\t\n\t var parseResponse = _.jsonParse(request.responseText);\n\t if (_isSuccess(request)) {\n\t callback(parseResponse.error, parseResponse.value);\n\t return;\n\t } else if (_isNormalFailure(request)) {\n\t if (request.status === 403) {\n\t // likely caused by using a server access token\n\t var message = parseResponse.value && parseResponse.value.message;\n\t logger.error(message);\n\t }\n\t // return valid http status codes\n\t callback(new Error(String(request.status)));\n\t } else {\n\t // IE will return a status 12000+ on some sort of connection failure,\n\t // so we return a blank error\n\t // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n\t var msg = 'XHR response had no status code (likely connection failure)';\n\t callback(_newRetriableError(msg));\n\t }\n\t }\n\t } catch (ex) {\n\t //jquery source mentions firefox may error out while accessing the\n\t //request members if there is a network error\n\t //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n\t var exc;\n\t if (ex && ex.stack) {\n\t exc = ex;\n\t } else {\n\t exc = new Error(ex);\n\t }\n\t callback(exc);\n\t }\n\t };\n\t\n\t request.open(method, url, true);\n\t if (request.setRequestHeader) {\n\t request.setRequestHeader('Content-Type', 'application/json');\n\t request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n\t }\n\t request.onreadystatechange = onreadystatechange;\n\t request.send(data);\n\t } catch (e1) {\n\t // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n\t if (typeof XDomainRequest !== 'undefined') {\n\t\n\t // Assume we are in a really old browser which has a bunch of limitations:\n\t // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\t\n\t // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n\t if (!window || !window.location) {\n\t return callback(new Error('No window available during request, unknown environment'));\n\t }\n\t\n\t // If the current page is http, try and send over http\n\t if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n\t url = 'http' + url.substring(5);\n\t }\n\t\n\t var xdomainrequest = new XDomainRequest();\n\t xdomainrequest.onprogress = function() {};\n\t xdomainrequest.ontimeout = function() {\n\t var msg = 'Request timed out';\n\t var code = 'ETIMEDOUT';\n\t callback(_newRetriableError(msg, code));\n\t };\n\t xdomainrequest.onerror = function() {\n\t callback(new Error('Error during request'));\n\t };\n\t xdomainrequest.onload = function() {\n\t var parseResponse = _.jsonParse(xdomainrequest.responseText);\n\t callback(parseResponse.error, parseResponse.value);\n\t };\n\t xdomainrequest.open(method, url, true);\n\t xdomainrequest.send(data);\n\t } else {\n\t callback(new Error('Cannot find a method to transport a request'));\n\t }\n\t }\n\t } catch (e2) {\n\t callback(e2);\n\t }\n\t}\n\t\n\tfunction _createXMLHTTPObject() {\n\t /* global ActiveXObject:false */\n\t\n\t var factories = [\n\t function () {\n\t return new XMLHttpRequest();\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml2.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Msxml3.XMLHTTP');\n\t },\n\t function () {\n\t return new ActiveXObject('Microsoft.XMLHTTP');\n\t }\n\t ];\n\t var xmlhttp;\n\t var i;\n\t var numFactories = factories.length;\n\t for (i = 0; i < numFactories; i++) {\n\t /* eslint-disable no-empty */\n\t try {\n\t xmlhttp = factories[i]();\n\t break;\n\t } catch (e) {\n\t // pass\n\t }\n\t /* eslint-enable no-empty */\n\t }\n\t return xmlhttp;\n\t}\n\t\n\tfunction _isSuccess(r) {\n\t return r && r.status && r.status === 200;\n\t}\n\t\n\tfunction _isNormalFailure(r) {\n\t return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n\t}\n\t\n\tfunction _newRetriableError(message, code) {\n\t var err = new Error(message);\n\t err.code = code || 'ENOTFOUND';\n\t return err;\n\t}\n\t\n\tmodule.exports = {\n\t get: get,\n\t post: post,\n\t postJsonPayload: postJsonPayload\n\t};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\t// See https://nodejs.org/docs/latest/api/url.html\n\tfunction parse(url) {\n\t var result = {\n\t protocol: null, auth: null, host: null, path: null,\n\t hash: null, href: url, hostname: null, port: null,\n\t pathname: null, search: null, query: null\n\t };\n\t\n\t var i, last;\n\t i = url.indexOf('//');\n\t if (i !== -1) {\n\t result.protocol = url.substring(0,i);\n\t last = i+2;\n\t } else {\n\t last = 0;\n\t }\n\t \n\t i = url.indexOf('@', last);\n\t if (i !== -1) {\n\t result.auth = url.substring(last, i);\n\t last = i+1;\n\t }\n\t\n\t i = url.indexOf('/', last);\n\t if (i === -1) {\n\t i = url.indexOf('?', last);\n\t if (i === -1) {\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.host = url.substring(last);\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t return result;\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t } else {\n\t result.host = url.substring(last, i);\n\t result.hostname = result.host.split(':')[0];\n\t result.port = result.host.split(':')[1];\n\t if (result.port) {\n\t result.port = parseInt(result.port, 10);\n\t }\n\t last = i;\n\t }\n\t\n\t i = url.indexOf('#', last);\n\t if (i === -1) {\n\t result.path = url.substring(last);\n\t } else {\n\t result.path = url.substring(last, i);\n\t result.hash = url.substring(i);\n\t }\n\t\n\t if (result.path) {\n\t var pathParts = result.path.split('?');\n\t result.pathname = pathParts[0];\n\t result.query = pathParts[1];\n\t result.search = result.query ? '?' + result.query : null;\n\t }\n\t return result;\n\t}\n\t\n\tmodule.exports = {\n\t parse: parse\n\t};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar errorParser = __webpack_require__(21);\n\tvar logger = __webpack_require__(14);\n\t\n\tfunction handleItemWithError(item, options, callback) {\n\t item.data = item.data || {};\n\t if (item.err) {\n\t try {\n\t item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n\t } catch (e) {\n\t logger.error('Error while parsing the error object.', e);\n\t try {\n\t item.message = item.err.message || item.err.description || item.message || String(item.err);\n\t } catch (e2) {\n\t item.message = String(item.err) || String(e2);\n\t }\n\t delete item.err;\n\t }\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction ensureItemHasSomethingToSay(item, options, callback) {\n\t if (!item.message && !item.stackInfo && !item.custom) {\n\t callback(new Error('No message, stack info, or custom data'), null);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addBaseInfo(item, options, callback) {\n\t var environment = (options.payload && options.payload.environment) || options.environment;\n\t item.data = _.merge(item.data, {\n\t environment: environment,\n\t level: item.level,\n\t endpoint: options.endpoint,\n\t platform: 'browser',\n\t framework: 'browser-js',\n\t language: 'javascript',\n\t server: {},\n\t uuid: item.uuid,\n\t notifier: {\n\t name: 'rollbar-browser-js',\n\t version: options.version\n\t }\n\t });\n\t callback(null, item);\n\t}\n\t\n\tfunction addRequestInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.location) {\n\t return callback(null, item);\n\t }\n\t var remoteString = '$remote_ip';\n\t if (!options.captureIp) {\n\t remoteString = null;\n\t } else if (options.captureIp !== true) {\n\t remoteString += '_anonymize';\n\t }\n\t _.set(item, 'data.request', {\n\t url: window.location.href,\n\t query_string: window.location.search,\n\t user_ip: remoteString\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addClientInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window) {\n\t return callback(null, item);\n\t }\n\t var nav = window.navigator || {};\n\t var scr = window.screen || {};\n\t _.set(item, 'data.client', {\n\t runtime_ms: item.timestamp - window._rollbarStartTime,\n\t timestamp: Math.round(item.timestamp / 1000),\n\t javascript: {\n\t browser: nav.userAgent,\n\t language: nav.language,\n\t cookie_enabled: nav.cookieEnabled,\n\t screen: {\n\t width: scr.width,\n\t height: scr.height\n\t }\n\t }\n\t });\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addPluginInfo(window) {\n\t return function(item, options, callback) {\n\t if (!window || !window.navigator) {\n\t return callback(null, item);\n\t }\n\t var plugins = [];\n\t var navPlugins = window.navigator.plugins || [];\n\t var cur;\n\t for (var i=0, l=navPlugins.length; i < l; ++i) {\n\t cur = navPlugins[i];\n\t plugins.push({name: cur.name, description: cur.description});\n\t }\n\t _.set(item, 'data.client.javascript.plugins', plugins);\n\t callback(null, item);\n\t };\n\t}\n\t\n\tfunction addBody(item, options, callback) {\n\t if (item.stackInfo) {\n\t addBodyTrace(item, options, callback);\n\t } else {\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction addBodyMessage(item, options, callback) {\n\t var message = item.message;\n\t var custom = item.custom;\n\t\n\t if (!message) {\n\t if (custom) {\n\t var scrubFields = options.scrubFields;\n\t var messageResult = _.stringify(_.scrub(custom, scrubFields));\n\t message = messageResult.error || messageResult.value || '';\n\t } else {\n\t message = '';\n\t }\n\t }\n\t var result = {\n\t body: message\n\t };\n\t\n\t if (custom) {\n\t result.extra = _.merge(custom);\n\t }\n\t\n\t _.set(item, 'data.body', {message: result});\n\t callback(null, item);\n\t}\n\t\n\t\n\tfunction addBodyTrace(item, options, callback) {\n\t var description = item.data.description;\n\t var stackInfo = item.stackInfo;\n\t var custom = item.custom;\n\t\n\t var guess = errorParser.guessErrorClass(stackInfo.message);\n\t var className = stackInfo.name || guess[0];\n\t var message = guess[1];\n\t var trace = {\n\t exception: {\n\t 'class': className,\n\t message: message\n\t }\n\t };\n\t\n\t if (description) {\n\t trace.exception.description = description;\n\t }\n\t\n\t // Transform a TraceKit stackInfo object into a Rollbar trace\n\t var stack = stackInfo.stack;\n\t if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n\t stack = item._unhandledStackInfo.stack;\n\t }\n\t if (stack) {\n\t if (stack.length === 0) {\n\t trace.exception.stack = stackInfo.rawStack;\n\t trace.exception.raw = String(stackInfo.rawException);\n\t }\n\t var stackFrame;\n\t var frame;\n\t var code;\n\t var pre;\n\t var post;\n\t var contextLength;\n\t var i, mid;\n\t\n\t trace.frames = [];\n\t for (i = 0; i < stack.length; ++i) {\n\t stackFrame = stack[i];\n\t frame = {\n\t filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n\t lineno: stackFrame.line || null,\n\t method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n\t colno: stackFrame.column\n\t };\n\t if (options.sendFrameUrl) {\n\t frame.url = stackFrame.url;\n\t }\n\t if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n\t continue;\n\t }\n\t\n\t code = pre = post = null;\n\t contextLength = stackFrame.context ? stackFrame.context.length : 0;\n\t if (contextLength) {\n\t mid = Math.floor(contextLength / 2);\n\t pre = stackFrame.context.slice(0, mid);\n\t code = stackFrame.context[mid];\n\t post = stackFrame.context.slice(mid);\n\t }\n\t\n\t if (code) {\n\t frame.code = code;\n\t }\n\t\n\t if (pre || post) {\n\t frame.context = {};\n\t if (pre && pre.length) {\n\t frame.context.pre = pre;\n\t }\n\t if (post && post.length) {\n\t frame.context.post = post;\n\t }\n\t }\n\t\n\t if (stackFrame.args) {\n\t frame.args = stackFrame.args;\n\t }\n\t\n\t trace.frames.push(frame);\n\t }\n\t\n\t // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n\t trace.frames.reverse();\n\t\n\t if (custom) {\n\t trace.extra = _.merge(custom);\n\t }\n\t _.set(item, 'data.body', {trace: trace});\n\t callback(null, item);\n\t } else {\n\t item.message = className + ': ' + message;\n\t addBodyMessage(item, options, callback);\n\t }\n\t}\n\t\n\tfunction scrubPayload(item, options, callback) {\n\t var scrubFields = options.scrubFields;\n\t item.data = _.scrub(item.data, scrubFields);\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t handleItemWithError: handleItemWithError,\n\t ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n\t addBaseInfo: addBaseInfo,\n\t addRequestInfo: addRequestInfo,\n\t addClientInfo: addClientInfo,\n\t addPluginInfo: addPluginInfo,\n\t addBody: addBody,\n\t scrubPayload: scrubPayload\n\t};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar ErrorStackParser = __webpack_require__(22);\n\t\n\tvar UNKNOWN_FUNCTION = '?';\n\tvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\t\n\tfunction guessFunctionName() {\n\t return UNKNOWN_FUNCTION;\n\t}\n\t\n\t\n\tfunction gatherContext() {\n\t return null;\n\t}\n\t\n\t\n\tfunction Frame(stackFrame) {\n\t var data = {};\n\t\n\t data._stackFrame = stackFrame;\n\t\n\t data.url = stackFrame.fileName;\n\t data.line = stackFrame.lineNumber;\n\t data.func = stackFrame.functionName;\n\t data.column = stackFrame.columnNumber;\n\t data.args = stackFrame.args;\n\t\n\t data.context = gatherContext();\n\t\n\t return data;\n\t}\n\t\n\t\n\tfunction Stack(exception) {\n\t function getStack() {\n\t var parserStack = [];\n\t var exc;\n\t\n\t if (!exception.stack) {\n\t try {\n\t throw exception;\n\t } catch (e) {\n\t exc = e;\n\t }\n\t } else {\n\t exc = exception;\n\t }\n\t\n\t try {\n\t parserStack = ErrorStackParser.parse(exc);\n\t } catch(e) {\n\t parserStack = [];\n\t }\n\t\n\t var stack = [];\n\t\n\t for (var i = 0; i < parserStack.length; i++) {\n\t stack.push(new Frame(parserStack[i]));\n\t }\n\t\n\t return stack;\n\t }\n\t\n\t var name = exception.constructor && exception.constructor.name;\n\t if (!name || !name.length || name.length < 3) {\n\t name = exception.name;\n\t }\n\t\n\t return {\n\t stack: getStack(),\n\t message: exception.message,\n\t name: name,\n\t rawStack: exception.stack,\n\t rawException: exception\n\t };\n\t}\n\t\n\t\n\tfunction parse(e) {\n\t return new Stack(e);\n\t}\n\t\n\t\n\tfunction guessErrorClass(errMsg) {\n\t if (!errMsg || !errMsg.match) {\n\t return ['Unknown error. There was no error message to display.', ''];\n\t }\n\t var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n\t var errClass = '(unknown)';\n\t\n\t if (errClassMatch) {\n\t errClass = errClassMatch[errClassMatch.length - 1];\n\t errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n\t errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n\t }\n\t return [errClass, errMsg];\n\t}\n\t\n\t\n\tmodule.exports = {\n\t guessFunctionName: guessFunctionName,\n\t guessErrorClass: guessErrorClass,\n\t gatherContext: gatherContext,\n\t parse: parse,\n\t Stack: Stack,\n\t Frame: Frame\n\t};\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(23)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory(require('stackframe'));\n\t } else {\n\t root.ErrorStackParser = factory(root.StackFrame);\n\t }\n\t}(this, function ErrorStackParser(StackFrame) {\n\t 'use strict';\n\t\n\t var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n\t var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n\t var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\t\n\t function _map(array, fn, thisArg) {\n\t if (typeof Array.prototype.map === 'function') {\n\t return array.map(fn, thisArg);\n\t } else {\n\t var output = new Array(array.length);\n\t for (var i = 0; i < array.length; i++) {\n\t output[i] = fn.call(thisArg, array[i]);\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t function _filter(array, fn, thisArg) {\n\t if (typeof Array.prototype.filter === 'function') {\n\t return array.filter(fn, thisArg);\n\t } else {\n\t var output = [];\n\t for (var i = 0; i < array.length; i++) {\n\t if (fn.call(thisArg, array[i])) {\n\t output.push(array[i]);\n\t }\n\t }\n\t return output;\n\t }\n\t }\n\t\n\t return {\n\t /**\n\t * Given an Error object, extract the most information from it.\n\t * @param error {Error}\n\t * @return Array[StackFrame]\n\t */\n\t parse: function ErrorStackParser$$parse(error) {\n\t if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n\t return this.parseOpera(error);\n\t } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n\t return this.parseV8OrIE(error);\n\t } else if (error.stack) {\n\t return this.parseFFOrSafari(error);\n\t } else {\n\t throw new Error('Cannot parse given Error object');\n\t }\n\t },\n\t\n\t /**\n\t * Separate line and column numbers from a URL-like string.\n\t * @param urlLike String\n\t * @return Array[String]\n\t */\n\t extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n\t // Fail-fast but return locations like \"(native)\"\n\t if (urlLike.indexOf(':') === -1) {\n\t return [urlLike];\n\t }\n\t\n\t var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n\t var lastNumber = locationParts.pop();\n\t var possibleNumber = locationParts[locationParts.length - 1];\n\t if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n\t var lineNumber = locationParts.pop();\n\t return [locationParts.join(':'), lineNumber, lastNumber];\n\t } else {\n\t return [locationParts.join(':'), lastNumber, undefined];\n\t }\n\t },\n\t\n\t parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(CHROME_IE_STACK_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t if (line.indexOf('(eval ') > -1) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n\t }\n\t var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.join(' ') || undefined;\n\t var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\t\n\t return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n\t }, this);\n\t },\n\t\n\t parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t // Throw away eval information until we implement stacktrace.js/stackframe#8\n\t if (line.indexOf(' > eval') > -1) {\n\t line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n\t }\n\t\n\t if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n\t // Safari eval frames only have function names and nothing else\n\t return new StackFrame(line);\n\t } else {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionName = tokens.shift() || undefined;\n\t return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n\t }\n\t }, this);\n\t },\n\t\n\t parseOpera: function ErrorStackParser$$parseOpera(e) {\n\t if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n\t e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n\t return this.parseOpera9(e);\n\t } else if (!e.stack) {\n\t return this.parseOpera10(e);\n\t } else {\n\t return this.parseOpera11(e);\n\t }\n\t },\n\t\n\t parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n\t var lines = e.message.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 2, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n\t var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n\t var lines = e.stacktrace.split('\\n');\n\t var result = [];\n\t\n\t for (var i = 0, len = lines.length; i < len; i += 2) {\n\t var match = lineRE.exec(lines[i]);\n\t if (match) {\n\t result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n\t }\n\t }\n\t\n\t return result;\n\t },\n\t\n\t // Opera 10.65+ Error.stack very similar to FF/Safari\n\t parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n\t var filtered = _filter(error.stack.split('\\n'), function (line) {\n\t return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n\t !line.match(/^Error created at/);\n\t }, this);\n\t\n\t return _map(filtered, function (line) {\n\t var tokens = line.split('@');\n\t var locationParts = this.extractLocation(tokens.pop());\n\t var functionCall = (tokens.shift() || '');\n\t var functionName = functionCall\n\t .replace(//, '$2')\n\t .replace(/\\([^\\)]*\\)/g, '') || undefined;\n\t var argsRaw;\n\t if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n\t argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n\t }\n\t var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n\t return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n\t }, this);\n\t }\n\t };\n\t}));\n\t\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n\t 'use strict';\n\t // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\t\n\t /* istanbul ignore next */\n\t if (true) {\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t } else if (typeof exports === 'object') {\n\t module.exports = factory();\n\t } else {\n\t root.StackFrame = factory();\n\t }\n\t}(this, function () {\n\t 'use strict';\n\t function _isNumber(n) {\n\t return !isNaN(parseFloat(n)) && isFinite(n);\n\t }\n\t\n\t function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n\t if (functionName !== undefined) {\n\t this.setFunctionName(functionName);\n\t }\n\t if (args !== undefined) {\n\t this.setArgs(args);\n\t }\n\t if (fileName !== undefined) {\n\t this.setFileName(fileName);\n\t }\n\t if (lineNumber !== undefined) {\n\t this.setLineNumber(lineNumber);\n\t }\n\t if (columnNumber !== undefined) {\n\t this.setColumnNumber(columnNumber);\n\t }\n\t if (source !== undefined) {\n\t this.setSource(source);\n\t }\n\t }\n\t\n\t StackFrame.prototype = {\n\t getFunctionName: function () {\n\t return this.functionName;\n\t },\n\t setFunctionName: function (v) {\n\t this.functionName = String(v);\n\t },\n\t\n\t getArgs: function () {\n\t return this.args;\n\t },\n\t setArgs: function (v) {\n\t if (Object.prototype.toString.call(v) !== '[object Array]') {\n\t throw new TypeError('Args must be an Array');\n\t }\n\t this.args = v;\n\t },\n\t\n\t // NOTE: Property name may be misleading as it includes the path,\n\t // but it somewhat mirrors V8's JavaScriptStackTraceApi\n\t // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n\t // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n\t getFileName: function () {\n\t return this.fileName;\n\t },\n\t setFileName: function (v) {\n\t this.fileName = String(v);\n\t },\n\t\n\t getLineNumber: function () {\n\t return this.lineNumber;\n\t },\n\t setLineNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Line Number must be a Number');\n\t }\n\t this.lineNumber = Number(v);\n\t },\n\t\n\t getColumnNumber: function () {\n\t return this.columnNumber;\n\t },\n\t setColumnNumber: function (v) {\n\t if (!_isNumber(v)) {\n\t throw new TypeError('Column Number must be a Number');\n\t }\n\t this.columnNumber = Number(v);\n\t },\n\t\n\t getSource: function () {\n\t return this.source;\n\t },\n\t setSource: function (v) {\n\t this.source = String(v);\n\t },\n\t\n\t toString: function() {\n\t var functionName = this.getFunctionName() || '{anonymous}';\n\t var args = '(' + (this.getArgs() || []).join(',') + ')';\n\t var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n\t var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n\t var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n\t return functionName + args + fileName + lineNumber + columnNumber;\n\t }\n\t };\n\t\n\t return StackFrame;\n\t}));\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction itemToPayload(item, options, callback) {\n\t var payloadOptions = options.payload || {};\n\t if (payloadOptions.body) {\n\t delete payloadOptions.body;\n\t }\n\t\n\t var data = _.merge(item.data, payloadOptions);\n\t if (item._isUncaught) {\n\t data._isUncaught = true;\n\t }\n\t if (item._originalArgs) {\n\t data._originalArgs = item._originalArgs;\n\t }\n\t callback(null, data);\n\t}\n\t\n\tfunction addTelemetryData(item, options, callback) {\n\t if (item.telemetryEvents) {\n\t _.set(item, 'data.body.telemetry', item.telemetryEvents);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction addMessageWithError(item, options, callback) {\n\t if (!item.message) {\n\t callback(null, item);\n\t return;\n\t }\n\t var tracePath = 'data.body.trace_chain.0';\n\t var trace = _.get(item, tracePath);\n\t if (!trace) {\n\t tracePath = 'data.body.trace';\n\t trace = _.get(item, tracePath);\n\t }\n\t if (trace) {\n\t if (!(trace.exception && trace.exception.description)) {\n\t _.set(item, tracePath+'.exception.description', item.message);\n\t callback(null, item);\n\t return;\n\t }\n\t var extra = _.get(item, tracePath+'.extra') || {};\n\t var newExtra = _.merge(extra, {message: item.message});\n\t _.set(item, tracePath+'.extra', newExtra);\n\t }\n\t callback(null, item);\n\t}\n\t\n\tfunction userTransform(logger) {\n\t return function(item, options, callback) {\n\t var newItem = _.merge(item);\n\t try {\n\t if (_.isFunction(options.transform)) {\n\t options.transform(newItem.data, item);\n\t }\n\t } catch (e) {\n\t options.transform = null;\n\t logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n\t callback(null, item);\n\t return;\n\t }\n\t callback(null, newItem);\n\t }\n\t}\n\t\n\tfunction addConfigToPayload(item, options, callback) {\n\t if (!options.sendConfig) {\n\t return callback(null, item);\n\t }\n\t var configKey = '_rollbarConfig';\n\t var custom = _.get(item, 'data.custom') || {};\n\t custom[configKey] = options;\n\t item.data.custom = custom;\n\t callback(null, item);\n\t}\n\t\n\tmodule.exports = {\n\t itemToPayload: itemToPayload,\n\t addTelemetryData: addTelemetryData,\n\t addMessageWithError: addMessageWithError,\n\t userTransform: userTransform,\n\t addConfigToPayload: addConfigToPayload\n\t};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkIgnore(item, settings) {\n\t if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n\t return !_.get(item, 'body.message.extra.isAjax');\n\t }\n\t return true;\n\t}\n\t\n\tmodule.exports = {\n\t checkIgnore: checkIgnore\n\t};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\t\n\tfunction checkLevel(item, settings) {\n\t var level = item.level;\n\t var levelVal = _.LEVELS[level] || 0;\n\t var reportLevel = settings.reportLevel;\n\t var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\t\n\t if (levelVal < reportLevelVal) {\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction userCheckIgnore(logger) {\n\t return function(item, settings) {\n\t var isUncaught = !!item._isUncaught;\n\t delete item._isUncaught;\n\t var args = item._originalArgs;\n\t delete item._originalArgs;\n\t try {\n\t if (_.isFunction(settings.onSendCallback)) {\n\t settings.onSendCallback(isUncaught, args, item);\n\t }\n\t } catch (e) {\n\t settings.onSendCallback = null;\n\t logger.error('Error while calling onSendCallback, removing', e);\n\t }\n\t try {\n\t if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n\t return false;\n\t }\n\t } catch (e) {\n\t settings.checkIgnore = null;\n\t logger.error('Error while calling custom checkIgnore(), removing', e);\n\t }\n\t return true;\n\t }\n\t}\n\t\n\tfunction urlIsNotBlacklisted(logger) {\n\t return function(item, settings) {\n\t return !urlIsOnAList(item, settings, 'blacklist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsWhitelisted(logger) {\n\t return function(item, settings) {\n\t return urlIsOnAList(item, settings, 'whitelist', logger);\n\t }\n\t}\n\t\n\tfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n\t // whitelist is the default\n\t var black = false;\n\t if (whiteOrBlack === 'blacklist') {\n\t black = true;\n\t }\n\t var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n\t var i, j;\n\t\n\t try {\n\t list = black ? settings.hostBlackList : settings.hostWhiteList;\n\t listLength = list && list.length;\n\t trace = _.get(item, 'body.trace');\n\t\n\t // These two checks are important to come first as they are defaults\n\t // in case the list is missing or the trace is missing or not well-formed\n\t if (!list || listLength === 0) {\n\t return !black;\n\t }\n\t if (!trace || !trace.frames || trace.frames.length === 0) {\n\t return !black;\n\t }\n\t\n\t frameLength = trace.frames.length;\n\t for (i = 0; i < frameLength; i++) {\n\t frame = trace.frames[i];\n\t filename = frame.filename;\n\t\n\t if (!_.isType(filename, 'string')) {\n\t return !black;\n\t }\n\t\n\t for (j = 0; j < listLength; j++) {\n\t url = list[j];\n\t urlRegex = new RegExp(url);\n\t\n\t if (urlRegex.test(filename)) {\n\t return true;\n\t }\n\t }\n\t }\n\t } catch (e)\n\t /* istanbul ignore next */\n\t {\n\t if (black) {\n\t settings.hostBlackList = null;\n\t } else {\n\t settings.hostWhiteList = null;\n\t }\n\t var listName = black ? 'hostBlackList' : 'hostWhiteList';\n\t logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n\t return !black;\n\t }\n\t return false;\n\t}\n\t\n\tfunction messageIsIgnored(logger) {\n\t return function(item, settings) {\n\t var exceptionMessage, i, ignoredMessages,\n\t len, messageIsIgnored, rIgnoredMessage,\n\t body, traceMessage, bodyMessage;\n\t\n\t try {\n\t messageIsIgnored = false;\n\t ignoredMessages = settings.ignoredMessages;\n\t\n\t if (!ignoredMessages || ignoredMessages.length === 0) {\n\t return true;\n\t }\n\t\n\t body = item.body;\n\t traceMessage = _.get(body, 'trace.exception.message');\n\t bodyMessage = _.get(body, 'message.body');\n\t\n\t exceptionMessage = traceMessage || bodyMessage;\n\t\n\t if (!exceptionMessage){\n\t return true;\n\t }\n\t\n\t len = ignoredMessages.length;\n\t for (i = 0; i < len; i++) {\n\t rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n\t messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\t\n\t if (messageIsIgnored) {\n\t break;\n\t }\n\t }\n\t } catch(e)\n\t /* istanbul ignore next */\n\t {\n\t settings.ignoredMessages = null;\n\t logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n\t }\n\t\n\t return !messageIsIgnored;\n\t }\n\t}\n\t\n\tmodule.exports = {\n\t checkLevel: checkLevel,\n\t userCheckIgnore: userCheckIgnore,\n\t urlIsNotBlacklisted: urlIsNotBlacklisted,\n\t urlIsWhitelisted: urlIsWhitelisted,\n\t messageIsIgnored: messageIsIgnored\n\t};\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _ = __webpack_require__(5);\n\tvar urlparser = __webpack_require__(19);\n\tvar domUtil = __webpack_require__(28);\n\t\n\tvar defaults = {\n\t network: true,\n\t networkResponseHeaders: false,\n\t networkResponseBody: false,\n\t networkRequestBody: false,\n\t log: true,\n\t dom: true,\n\t navigation: true,\n\t connectivity: true\n\t};\n\t\n\tfunction replace(obj, name, replacement, replacements, type) {\n\t var orig = obj[name];\n\t obj[name] = replacement(orig);\n\t if (replacements) {\n\t replacements[type].push([obj, name, orig]);\n\t }\n\t}\n\t\n\tfunction restore(replacements, type) {\n\t var b;\n\t while (replacements[type].length) {\n\t b = replacements[type].shift();\n\t b[0][b[1]] = b[2];\n\t }\n\t}\n\t\n\tfunction nameFromDescription(description) {\n\t if (!description || !description.attributes) { return null; }\n\t var attrs = description.attributes;\n\t for (var a = 0; a < attrs.length; ++a) {\n\t if (attrs[a].key === 'name') {\n\t return attrs[a].value;\n\t }\n\t }\n\t return null;\n\t}\n\t\n\tfunction defaultValueScrubber(scrubFields) {\n\t var patterns = [];\n\t for (var i = 0; i < scrubFields.length; ++i) {\n\t patterns.push(new RegExp(scrubFields[i], 'i'));\n\t }\n\t return function(description) {\n\t var name = nameFromDescription(description);\n\t if (!name) { return false; }\n\t for (var i = 0; i < patterns.length; ++i) {\n\t if (patterns[i].test(name)) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t };\n\t}\n\t\n\tfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n\t var autoInstrument = options.autoInstrument;\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n\t this.telemeter = telemeter;\n\t this.rollbar = rollbar;\n\t this._window = _window || {};\n\t this._document = _document || {};\n\t this.replacements = {\n\t network: [],\n\t log: [],\n\t navigation: [],\n\t connectivity: []\n\t };\n\t this.eventRemovers = {\n\t dom: [],\n\t connectivity: []\n\t };\n\t\n\t this._location = this._window.location;\n\t this._lastHref = this._location && this._location.href;\n\t}\n\t\n\tInstrumenter.prototype.configure = function(options) {\n\t var autoInstrument = options.autoInstrument;\n\t var oldSettings = _.merge(this.autoInstrument);\n\t if (options.enabled === false || autoInstrument === false) {\n\t this.autoInstrument = {};\n\t } else {\n\t if (!_.isType(autoInstrument, 'object')) {\n\t autoInstrument = defaults;\n\t }\n\t this.autoInstrument = _.merge(defaults, autoInstrument);\n\t }\n\t this.instrument(oldSettings);\n\t if (options.scrubTelemetryInputs !== undefined) {\n\t this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n\t }\n\t if (options.telemetryScrubber !== undefined) {\n\t this.telemetryScrubber = options.telemetryScrubber;\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrument = function(oldSettings) {\n\t if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n\t this.instrumentNetwork();\n\t } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n\t this.deinstrumentNetwork();\n\t }\n\t\n\t if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n\t this.instrumentConsole();\n\t } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n\t this.deinstrumentConsole();\n\t }\n\t\n\t if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n\t this.instrumentDom();\n\t } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n\t this.deinstrumentDom();\n\t }\n\t\n\t if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n\t this.instrumentNavigation();\n\t } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n\t this.deinstrumentNavigation();\n\t }\n\t\n\t if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n\t this.instrumentConnectivity();\n\t } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n\t this.deinstrumentConnectivity();\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNetwork = function() {\n\t restore(this.replacements, 'network');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNetwork = function() {\n\t var self = this;\n\t\n\t function wrapProp(prop, xhr) {\n\t if (prop in xhr && _.isFunction(xhr[prop])) {\n\t replace(xhr, prop, function(orig) {\n\t return self.rollbar.wrap(orig);\n\t });\n\t }\n\t }\n\t\n\t if ('XMLHttpRequest' in this._window) {\n\t var xhrp = this._window.XMLHttpRequest.prototype;\n\t replace(xhrp, 'open', function(orig) {\n\t return function(method, url) {\n\t if (_.isType(url, 'string')) {\n\t this.__rollbar_xhr = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'network');\n\t\n\t replace(xhrp, 'send', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(data) {\n\t /* eslint-enable no-unused-vars */\n\t var xhr = this;\n\t\n\t function onreadystatechangeHandler() {\n\t if (xhr.__rollbar_xhr) {\n\t if (xhr.__rollbar_xhr.status_code === null) {\n\t xhr.__rollbar_xhr.status_code = 0;\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t requestData = data;\n\t }\n\t xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n\t }\n\t if (xhr.readyState < 2) {\n\t xhr.__rollbar_xhr.start_time_ms = _.now();\n\t }\n\t if (xhr.readyState > 3) {\n\t xhr.__rollbar_xhr.end_time_ms = _.now();\n\t\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t var header, i;\n\t if (headersConfig === true) {\n\t var allHeaders = xhr.getAllResponseHeaders();\n\t if (allHeaders) {\n\t var arr = allHeaders.trim().split(/[\\r\\n]+/);\n\t var parts, value;\n\t for (i=0; i < arr.length; i++) {\n\t parts = arr[i].split(': ');\n\t header = parts.shift();\n\t value = parts.join(': ');\n\t headers[header] = value;\n\t }\n\t }\n\t } else {\n\t for (i=0; i < headersConfig.length; i++) {\n\t header = headersConfig[i];\n\t headers[header] = xhr.getResponseHeader(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* we ignore the errors here that could come from different\n\t * browser issues with the xhr methods */\n\t }\n\t }\n\t var body = null;\n\t if (self.autoInstrument.networkResponseBody) {\n\t try {\n\t body = xhr.responseText;\n\t } catch (e) {\n\t /* ignore errors from reading responseText */\n\t }\n\t }\n\t var response = null;\n\t if (body || headers) {\n\t response = {};\n\t if (body) {\n\t response.body = body;\n\t }\n\t if (headers) {\n\t response.headers = headers;\n\t }\n\t }\n\t if (response) {\n\t xhr.__rollbar_xhr.response = response;\n\t }\n\t try {\n\t var code = xhr.status;\n\t code = code === 1223 ? 204 : code;\n\t xhr.__rollbar_xhr.status_code = code;\n\t xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n\t } catch (e) {\n\t /* ignore possible exception from xhr.status */\n\t }\n\t }\n\t }\n\t }\n\t\n\t wrapProp('onload', xhr);\n\t wrapProp('onerror', xhr);\n\t wrapProp('onprogress', xhr);\n\t\n\t if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n\t replace(xhr, 'onreadystatechange', function(orig) {\n\t return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n\t });\n\t } else {\n\t xhr.onreadystatechange = onreadystatechangeHandler;\n\t }\n\t return orig.apply(this, arguments);\n\t }\n\t }, this.replacements, 'network');\n\t }\n\t\n\t if ('fetch' in this._window) {\n\t replace(this._window, 'fetch', function(orig) {\n\t /* eslint-disable no-unused-vars */\n\t return function(fn, t) {\n\t /* eslint-enable no-unused-vars */\n\t var args = new Array(arguments.length);\n\t for (var i=0, len=args.length; i < len; i++) {\n\t args[i] = arguments[i];\n\t }\n\t var input = args[0];\n\t var method = 'GET';\n\t var url;\n\t if (_.isType(input, 'string')) {\n\t url = input;\n\t } else if (input) {\n\t url = input.url;\n\t if (input.method) {\n\t method = input.method;\n\t }\n\t }\n\t if (args[1] && args[1].method) {\n\t method = args[1].method;\n\t }\n\t var metadata = {\n\t method: method,\n\t url: url,\n\t status_code: null,\n\t start_time_ms: _.now(),\n\t end_time_ms: null\n\t };\n\t var requestData = null;\n\t if (self.autoInstrument.networkRequestBody) {\n\t if (args[1] && args[1].body) {\n\t requestData = args[1].body;\n\t } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n\t requestData = args[0].body;\n\t }\n\t }\n\t self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n\t return orig.apply(this, args).then(function (resp) {\n\t metadata.end_time_ms = _.now();\n\t metadata.status_code = resp.status;\n\t var headers = null;\n\t if (self.autoInstrument.networkResponseHeaders) {\n\t var headersConfig = self.autoInstrument.networkResponseHeaders;\n\t headers = {};\n\t try {\n\t if (headersConfig === true) {\n\t // This is unsupported in IE so we can't do it\n\t /*\n\t var allHeaders = resp.headers.entries();\n\t for (var pair of allHeaders) {\n\t headers[pair[0]] = pair[1];\n\t }\n\t */\n\t } else {\n\t for (var i=0; i < headersConfig.length; i++) {\n\t var header = headersConfig[i];\n\t headers[header] = resp.headers.get(header);\n\t }\n\t }\n\t } catch (e) {\n\t /* ignore probable IE errors */\n\t }\n\t }\n\t var response = null;\n\t if (headers) {\n\t response = {\n\t headers: headers\n\t };\n\t }\n\t if (response) {\n\t metadata.response = response;\n\t }\n\t return resp;\n\t });\n\t };\n\t }, this.replacements, 'network');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t var b;\n\t while (this.replacements['log'].length) {\n\t b = this.replacements['log'].shift();\n\t this._window.console[b[0]] = b[1];\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConsole = function() {\n\t if (!('console' in this._window && this._window.console.log)) {\n\t return;\n\t }\n\t\n\t var self = this;\n\t var c = this._window.console;\n\t\n\t function wrapConsole(method) {\n\t var orig = c[method];\n\t var origConsole = c;\n\t var level = method === 'warn' ? 'warning' : method;\n\t c[method] = function() {\n\t var args = Array.prototype.slice.call(arguments);\n\t var message = _.formatArgsAsString(args);\n\t self.telemeter.captureLog(message, level);\n\t if (orig) {\n\t Function.prototype.apply.call(orig, origConsole, args);\n\t }\n\t };\n\t self.replacements['log'].push([method, orig]);\n\t }\n\t var methods = ['debug','info','warn','error','log'];\n\t for (var i=0, len=methods.length; i < len; i++) {\n\t wrapConsole(methods[i]);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t this.removeListeners('dom');\n\t};\n\t\n\tInstrumenter.prototype.instrumentDom = function() {\n\t if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n\t return;\n\t }\n\t var clickHandler = this.handleClick.bind(this);\n\t var blurHandler = this.handleBlur.bind(this);\n\t this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n\t this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n\t};\n\t\n\tInstrumenter.prototype.handleClick = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t var hasTag = e && e.tagName;\n\t var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n\t if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n\t this.captureDomEvent('click', e);\n\t } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value, e.checked);\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleBlur = function(evt) {\n\t try {\n\t var e = domUtil.getElementFromEvent(evt, this._document);\n\t if (e && e.tagName) {\n\t if (domUtil.isDescribedElement(e, 'textarea')) {\n\t this.captureDomEvent('input', e, e.value);\n\t } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n\t this.handleSelectInputChanged(e);\n\t } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n\t this.captureDomEvent('input', e, e.value);\n\t }\n\t }\n\t } catch (exc) {\n\t // TODO: Not sure what to do here\n\t }\n\t};\n\t\n\tInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n\t if (elem.multiple) {\n\t for (var i = 0; i < elem.options.length; i++) {\n\t if (elem.options[i].selected) {\n\t this.captureDomEvent('input', elem, elem.options[i].value);\n\t }\n\t }\n\t } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n\t this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n\t }\n\t};\n\t\n\tInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n\t if (value !== undefined) {\n\t if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n\t value = '[scrubbed]';\n\t } else {\n\t var description = domUtil.describeElement(element);\n\t if (this.telemetryScrubber) {\n\t if (this.telemetryScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t } else if (this.defaultValueScrubber(description)) {\n\t value = '[scrubbed]';\n\t }\n\t }\n\t }\n\t var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n\t this.telemeter.captureDom(subtype, elementString, value, isChecked);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t restore(this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.instrumentNavigation = function() {\n\t var chrome = this._window.chrome;\n\t var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n\t // See https://github.com/angular/angular.js/pull/13945/files\n\t var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n\t if (!hasPushState) {\n\t return;\n\t }\n\t var self = this;\n\t replace(this._window, 'onpopstate', function(orig) {\n\t return function() {\n\t var current = self._location.href;\n\t self.handleUrlChange(self._lastHref, current);\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t };\n\t }, this.replacements, 'navigation');\n\t\n\t replace(this._window.history, 'pushState', function(orig) {\n\t return function() {\n\t var url = arguments.length > 2 ? arguments[2] : undefined;\n\t if (url) {\n\t self.handleUrlChange(self._lastHref, url + '');\n\t }\n\t return orig.apply(this, arguments);\n\t };\n\t }, this.replacements, 'navigation');\n\t};\n\t\n\tInstrumenter.prototype.handleUrlChange = function(from, to) {\n\t var parsedHref = urlparser.parse(this._location.href);\n\t var parsedTo = urlparser.parse(to);\n\t var parsedFrom = urlparser.parse(from);\n\t this._lastHref = to;\n\t if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n\t to = parsedTo.path + (parsedTo.hash || '');\n\t }\n\t if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n\t from = parsedFrom.path + (parsedFrom.hash || '');\n\t }\n\t this.telemeter.captureNavigation(from, to);\n\t};\n\t\n\tInstrumenter.prototype.deinstrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.removeListeners('connectivity');\n\t } else {\n\t restore(this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.instrumentConnectivity = function() {\n\t if (!('addEventListener' in this._window || 'body' in this._document)) {\n\t return;\n\t }\n\t if (this._window.addEventListener) {\n\t this.addListener('connectivity', this._window, 'online', undefined, function() {\n\t this.telemeter.captureConnectivityChange('online');\n\t }.bind(this), true);\n\t this.addListener('connectivity', this._window, 'offline', undefined, function() {\n\t this.telemeter.captureConnectivityChange('offline');\n\t }.bind(this), true);\n\t } else {\n\t var self = this;\n\t replace(this._document.body, 'ononline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('online');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t replace(this._document.body, 'onoffline', function(orig) {\n\t return function() {\n\t self.telemeter.captureConnectivityChange('offline');\n\t if (orig) {\n\t orig.apply(this, arguments);\n\t }\n\t }\n\t }, this.replacements, 'connectivity');\n\t }\n\t};\n\t\n\tInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n\t if (obj.addEventListener) {\n\t obj.addEventListener(type, handler, capture);\n\t this.eventRemovers[section].push(function() {\n\t obj.removeEventListener(type, handler, capture);\n\t });\n\t } else if (altType) {\n\t obj.attachEvent(altType, handler);\n\t this.eventRemovers[section].push(function() {\n\t obj.detachEvent(altType, handler);\n\t });\n\t }\n\t};\n\t\n\tInstrumenter.prototype.removeListeners = function(section) {\n\t var r;\n\t while (this.eventRemovers[section].length) {\n\t r = this.eventRemovers[section].shift();\n\t r();\n\t }\n\t};\n\t\n\tmodule.exports = Instrumenter;\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction getElementType(e) {\n\t return (e.getAttribute('type') || '').toLowerCase();\n\t}\n\t\n\tfunction isDescribedElement(element, type, subtypes) {\n\t if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n\t return false;\n\t }\n\t if (!subtypes) {\n\t return true;\n\t }\n\t element = getElementType(element);\n\t for (var i = 0; i < subtypes.length; i++) {\n\t if (subtypes[i] === element) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\tfunction getElementFromEvent(evt, doc) {\n\t if (evt.target) {\n\t return evt.target;\n\t }\n\t if (doc && doc.elementFromPoint) {\n\t return doc.elementFromPoint(evt.clientX, evt.clientY);\n\t }\n\t return undefined;\n\t}\n\t\n\tfunction treeToArray(elem) {\n\t var MAX_HEIGHT = 5;\n\t var out = [];\n\t var nextDescription;\n\t for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n\t nextDescription = describeElement(elem);\n\t if (nextDescription.tagName === 'html') {\n\t break;\n\t }\n\t out.unshift(nextDescription);\n\t elem = elem.parentNode;\n\t }\n\t return out;\n\t}\n\t\n\tfunction elementArrayToString(a) {\n\t var MAX_LENGTH = 80;\n\t var separator = ' > ', separatorLength = separator.length;\n\t var out = [], len = 0, nextStr, totalLength;\n\t\n\t for (var i = a.length - 1; i >= 0; i--) {\n\t nextStr = descriptionToString(a[i]);\n\t totalLength = len + (out.length * separatorLength) + nextStr.length;\n\t if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n\t out.unshift('...');\n\t break;\n\t }\n\t out.unshift(nextStr);\n\t len += nextStr.length;\n\t }\n\t return out.join(separator);\n\t}\n\t\n\tfunction descriptionToString(desc) {\n\t if (!desc || !desc.tagName) {\n\t return '';\n\t }\n\t var out = [desc.tagName];\n\t if (desc.id) {\n\t out.push('#' + desc.id);\n\t }\n\t if (desc.classes) {\n\t out.push('.' + desc.classes.join('.'));\n\t }\n\t for (var i = 0; i < desc.attributes.length; i++) {\n\t out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n\t }\n\t\n\t return out.join('');\n\t}\n\t\n\t/**\n\t * Input: a dom element\n\t * Output: null if tagName is falsey or input is falsey, else\n\t * {\n\t * tagName: String,\n\t * id: String | undefined,\n\t * classes: [String] | undefined,\n\t * attributes: [\n\t * {\n\t * key: OneOf(type, name, title, alt),\n\t * value: String\n\t * }\n\t * ]\n\t * }\n\t */\n\tfunction describeElement(elem) {\n\t if (!elem || !elem.tagName) {\n\t return null;\n\t }\n\t var out = {}, className, key, attr, i;\n\t out.tagName = elem.tagName.toLowerCase();\n\t if (elem.id) {\n\t out.id = elem.id;\n\t }\n\t className = elem.className;\n\t if (className && (typeof className === 'string')) {\n\t out.classes = className.split(/\\s+/);\n\t }\n\t var attributes = ['type', 'name', 'title', 'alt'];\n\t out.attributes = [];\n\t for (i = 0; i < attributes.length; i++) {\n\t key = attributes[i];\n\t attr = elem.getAttribute(key);\n\t if (attr) {\n\t out.attributes.push({key: key, value: attr});\n\t }\n\t }\n\t return out;\n\t}\n\t\n\tmodule.exports = {\n\t describeElement: describeElement,\n\t descriptionToString: descriptionToString,\n\t elementArrayToString: elementArrayToString,\n\t treeToArray: treeToArray,\n\t getElementFromEvent: getElementFromEvent,\n\t isDescribedElement: isDescribedElement,\n\t getElementType: getElementType\n\t};\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// rollbar.umd.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 55abcf53b0a450d4ecf7","'use strict';\n\nvar rollbar = require('../rollbar');\n\nvar options = (typeof window !== 'undefined') && window._rollbarConfig;\nvar alias = options && options.globalAlias || 'Rollbar';\nvar shimRunning = (typeof window !== 'undefined') && window[alias] && typeof window[alias].shimId === 'function' && window[alias].shimId() !== undefined;\n\nif ((typeof window !== 'undefined') && !window._rollbarStartTime) {\n window._rollbarStartTime = (new Date()).getTime();\n}\n\nif (!shimRunning && options) {\n var Rollbar = new rollbar(options);\n window[alias] = Rollbar;\n} else if (typeof window !== 'undefined') {\n window.rollbar = rollbar;\n window._rollbarDidLoad = true;\n} else if (typeof self !== 'undefined') {\n self.rollbar = rollbar;\n self._rollbarDidLoad = true;\n}\n\nmodule.exports = rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/bundles/rollbar.js\n// module id = 1\n// module chunks = 0","'use strict';\n\nvar Client = require('../rollbar');\nvar _ = require('../utility');\nvar API = require('../api');\nvar logger = require('./logger');\nvar globals = require('./globalSetup');\n\nvar transport = require('./transport');\nvar urllib = require('./url');\n\nvar transforms = require('./transforms');\nvar sharedTransforms = require('../transforms');\nvar predicates = require('./predicates');\nvar sharedPredicates = require('../predicates');\nvar errorParser = require('./errorParser');\nvar Instrumenter = require('./telemetry');\n\nfunction Rollbar(options, client) {\n this.options = _.handleOptions(defaultOptions, options);\n var api = new API(this.options, transport, urllib);\n this.client = client || new Client(this.options, api, logger, 'browser');\n\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var gDocument = (typeof document != 'undefined') && document;\n addTransformsToNotifier(this.client.notifier, gWindow);\n addPredicatesToQueue(this.client.queue);\n if (this.options.captureUncaught || this.options.handleUncaughtExceptions) {\n globals.captureUncaughtExceptions(gWindow, this);\n globals.wrapGlobals(gWindow, this);\n }\n if (this.options.captureUnhandledRejections || this.options.handleUnhandledRejections) {\n globals.captureUnhandledRejections(gWindow, this);\n }\n\n this.instrumenter = new Instrumenter(this.options, this.client.telemeter, this, gWindow, gDocument);\n this.instrumenter.instrument();\n}\n\nvar _instance = null;\nRollbar.init = function(options, client) {\n if (_instance) {\n return _instance.global(options).configure(options);\n }\n _instance = new Rollbar(options, client);\n return _instance;\n};\n\nfunction handleUninitialized(maybeCallback) {\n var message = 'Rollbar is not initialized';\n logger.error(message);\n if (maybeCallback) {\n maybeCallback(new Error(message));\n }\n}\n\nRollbar.prototype.global = function(options) {\n this.client.global(options);\n return this;\n};\nRollbar.global = function(options) {\n if (_instance) {\n return _instance.global(options);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.handleOptions(oldOptions, options, payload);\n this.client.configure(this.options, payloadData);\n this.instrumenter.configure(this.options);\n return this;\n};\nRollbar.configure = function(options, payloadData) {\n if (_instance) {\n return _instance.configure(options, payloadData);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.lastError = function() {\n return this.client.lastError;\n};\nRollbar.lastError = function() {\n if (_instance) {\n return _instance.lastError();\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.log = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.log(item);\n return {uuid: uuid};\n};\nRollbar.log = function() {\n if (_instance) {\n return _instance.log.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.debug = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.debug(item);\n return {uuid: uuid};\n};\nRollbar.debug = function() {\n if (_instance) {\n return _instance.debug.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.info = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.info(item);\n return {uuid: uuid};\n};\nRollbar.info = function() {\n if (_instance) {\n return _instance.info.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warn = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warn(item);\n return {uuid: uuid};\n};\nRollbar.warn = function() {\n if (_instance) {\n return _instance.warn.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.warning = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.warning(item);\n return {uuid: uuid};\n};\nRollbar.warning = function() {\n if (_instance) {\n return _instance.warning.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.error = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.error(item);\n return {uuid: uuid};\n};\nRollbar.error = function() {\n if (_instance) {\n return _instance.error.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.critical = function() {\n var item = this._createItem(arguments);\n var uuid = item.uuid;\n this.client.critical(item);\n return {uuid: uuid};\n};\nRollbar.critical = function() {\n if (_instance) {\n return _instance.critical.apply(_instance, arguments);\n } else {\n var maybeCallback = _getFirstFunction(arguments);\n handleUninitialized(maybeCallback);\n }\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.client.buildJsonPayload(item);\n};\nRollbar.buildJsonPayload = function() {\n if (_instance) {\n return _instance.buildJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n return this.client.sendJsonPayload(jsonPayload);\n};\nRollbar.sendJsonPayload = function() {\n if (_instance) {\n return _instance.sendJsonPayload.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.handleUncaughtException = function(message, url, lineno, colno, error, context) {\n var item;\n var stackInfo = _.makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n 'onerror',\n 'uncaught exception',\n errorParser\n );\n if (_.isError(error)) {\n item = this._createItem([message, error, context]);\n item._unhandledStackInfo = stackInfo;\n } else if (_.isError(url)) {\n item = this._createItem([message, url, context]);\n item._unhandledStackInfo = stackInfo;\n } else {\n item = this._createItem([message, context]);\n item.stackInfo = stackInfo;\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n this.client.log(item);\n};\n\nRollbar.prototype.handleUnhandledRejection = function(reason, promise) {\n var message = 'unhandled rejection was null or undefined!';\n if (reason) {\n if (reason.message) {\n message = reason.message;\n } else {\n var reasonResult = _.stringify(reason);\n if (reasonResult.value) {\n message = reasonResult.value;\n }\n }\n }\n var context = (reason && reason._rollbarContext) || (promise && promise._rollbarContext);\n\n var item;\n if (_.isError(reason)) {\n item = this._createItem([message, reason, context]);\n } else {\n item = this._createItem([message, reason, context]);\n item.stackInfo = _.makeUnhandledStackInfo(\n message,\n '',\n 0,\n 0,\n null,\n 'unhandledrejection',\n '',\n errorParser\n );\n }\n item.level = this.options.uncaughtErrorLevel;\n item._isUncaught = true;\n item._originalArgs = item._originalArgs || [];\n item._originalArgs.push(promise);\n this.client.log(item);\n};\n\nRollbar.prototype.wrap = function(f, context, _before) {\n try {\n var ctxFn;\n if(_.isFunction(context)) {\n ctxFn = context;\n } else {\n ctxFn = function() { return context || {}; };\n }\n\n if (!_.isFunction(f)) {\n return f;\n }\n\n if (f._isWrap) {\n return f;\n }\n\n if (!f._rollbar_wrapped) {\n f._rollbar_wrapped = function () {\n if (_before && _.isFunction(_before)) {\n _before.apply(this, arguments);\n }\n try {\n return f.apply(this, arguments);\n } catch(exc) {\n var e = exc;\n if (e && window._rollbarWrappedError !== e) {\n if (_.isType(e, 'string')) {\n e = new String(e);\n }\n e._rollbarContext = ctxFn() || {};\n e._rollbarContext._wrappedSource = f.toString();\n\n window._rollbarWrappedError = e;\n }\n throw e;\n }\n };\n\n f._rollbar_wrapped._isWrap = true;\n\n if (f.hasOwnProperty) {\n for (var prop in f) {\n if (f.hasOwnProperty(prop) && prop !== '_rollbar_wrapped') {\n f._rollbar_wrapped[prop] = f[prop];\n }\n }\n }\n }\n\n return f._rollbar_wrapped;\n } catch (e) {\n // Return the original function if the wrap fails.\n return f;\n }\n};\nRollbar.wrap = function(f, context) {\n if (_instance) {\n return _instance.wrap(f, context);\n } else {\n handleUninitialized();\n }\n};\n\nRollbar.prototype.captureEvent = function() {\n var event = _.createTelemetryEvent(arguments);\n return this.client.captureEvent(event.type, event.metadata, event.level);\n};\nRollbar.captureEvent = function() {\n if (_instance) {\n return _instance.captureEvent.apply(_instance, arguments);\n } else {\n handleUninitialized();\n }\n};\n\n// The following two methods are used internally and are not meant for public use\nRollbar.prototype.captureDomContentLoaded = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(e, ts) {\n if (!ts) {\n ts = new Date();\n }\n return this.client.captureLoad(ts);\n};\n\n/* Internal */\n\nfunction addTransformsToNotifier(notifier, gWindow) {\n notifier\n .addTransform(transforms.handleItemWithError)\n .addTransform(transforms.ensureItemHasSomethingToSay)\n .addTransform(transforms.addBaseInfo)\n .addTransform(transforms.addRequestInfo(gWindow))\n .addTransform(transforms.addClientInfo(gWindow))\n .addTransform(transforms.addPluginInfo(gWindow))\n .addTransform(transforms.addBody)\n .addTransform(sharedTransforms.addMessageWithError)\n .addTransform(sharedTransforms.addTelemetryData)\n .addTransform(sharedTransforms.addConfigToPayload)\n .addTransform(transforms.scrubPayload)\n .addTransform(sharedTransforms.userTransform(logger))\n .addTransform(sharedTransforms.itemToPayload);\n}\n\nfunction addPredicatesToQueue(queue) {\n queue\n .addPredicate(sharedPredicates.checkLevel)\n .addPredicate(predicates.checkIgnore)\n .addPredicate(sharedPredicates.userCheckIgnore(logger))\n .addPredicate(sharedPredicates.urlIsNotBlacklisted(logger))\n .addPredicate(sharedPredicates.urlIsWhitelisted(logger))\n .addPredicate(sharedPredicates.messageIsIgnored(logger));\n}\n\nRollbar.prototype._createItem = function(args) {\n return _.createItem(args, logger, this);\n};\n\nfunction _getFirstFunction(args) {\n for (var i = 0, len = args.length; i < len; ++i) {\n if (_.isFunction(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\n/* global __NOTIFIER_VERSION__:false */\n/* global __DEFAULT_BROWSER_SCRUB_FIELDS__:false */\n/* global __DEFAULT_LOG_LEVEL__:false */\n/* global __DEFAULT_REPORT_LEVEL__:false */\n/* global __DEFAULT_UNCAUGHT_ERROR_LEVEL:false */\n/* global __DEFAULT_ENDPOINT__:false */\n\nvar defaultOptions = {\n version: __NOTIFIER_VERSION__,\n scrubFields: __DEFAULT_BROWSER_SCRUB_FIELDS__,\n logLevel: __DEFAULT_LOG_LEVEL__,\n reportLevel: __DEFAULT_REPORT_LEVEL__,\n uncaughtErrorLevel: __DEFAULT_UNCAUGHT_ERROR_LEVEL,\n endpoint: __DEFAULT_ENDPOINT__,\n verbose: false,\n enabled: true,\n sendConfig: false,\n includeItemsInTelemetry: true,\n captureIp: true\n};\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/rollbar.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar RateLimiter = require('./rateLimiter');\nvar Queue = require('./queue');\nvar Notifier = require('./notifier');\nvar Telemeter = require('./telemetry');\nvar _ = require('./utility');\n\n/*\n * Rollbar - the interface to Rollbar\n *\n * @param options\n * @param api\n * @param logger\n */\nfunction Rollbar(options, api, logger, platform) {\n this.options = _.merge(options);\n this.logger = logger;\n Rollbar.rateLimiter.configureGlobal(this.options);\n Rollbar.rateLimiter.setPlatformOptions(platform, this.options);\n this.api = api;\n this.queue = new Queue(Rollbar.rateLimiter, api, logger, this.options);\n this.notifier = new Notifier(this.queue, this.options);\n this.telemeter = new Telemeter(this.options);\n this.lastError = null;\n this.lastErrorHash = 'none';\n}\n\nvar defaultOptions = {\n maxItems: 0,\n itemsPerMinute: 60\n};\n\nRollbar.rateLimiter = new RateLimiter(defaultOptions);\n\nRollbar.prototype.global = function(options) {\n Rollbar.rateLimiter.configureGlobal(options);\n return this;\n};\n\nRollbar.prototype.configure = function(options, payloadData) {\n var oldOptions = this.options;\n var payload = {};\n if (payloadData) {\n payload = {payload: payloadData};\n }\n this.options = _.merge(oldOptions, options, payload);\n this.notifier && this.notifier.configure(this.options);\n this.telemeter && this.telemeter.configure(this.options);\n this.global(this.options);\n return this;\n};\n\nRollbar.prototype.log = function(item) {\n var level = this._defaultLogLevel();\n return this._log(level, item);\n};\n\nRollbar.prototype.debug = function(item) {\n this._log('debug', item);\n};\n\nRollbar.prototype.info = function(item) {\n this._log('info', item);\n};\n\nRollbar.prototype.warn = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.warning = function(item) {\n this._log('warning', item);\n};\n\nRollbar.prototype.error = function(item) {\n this._log('error', item);\n};\n\nRollbar.prototype.critical = function(item) {\n this._log('critical', item);\n};\n\nRollbar.prototype.wait = function(callback) {\n this.queue.wait(callback);\n};\n\nRollbar.prototype.captureEvent = function(type, metadata, level) {\n return this.telemeter.captureEvent(type, metadata, level);\n};\n\nRollbar.prototype.captureDomContentLoaded = function(ts) {\n return this.telemeter.captureDomContentLoaded(ts);\n};\n\nRollbar.prototype.captureLoad = function(ts) {\n return this.telemeter.captureLoad(ts);\n};\n\nRollbar.prototype.buildJsonPayload = function(item) {\n return this.api.buildJsonPayload(item);\n};\n\nRollbar.prototype.sendJsonPayload = function(jsonPayload) {\n this.api.postJsonPayload(jsonPayload);\n};\n\n/* Internal */\n\nRollbar.prototype._log = function(defaultLevel, item) {\n var callback;\n if (item.callback) {\n callback = item.callback;\n delete item.callback;\n }\n if (this._sameAsLastError(item)) {\n if (callback) {\n var error = new Error('ignored identical item');\n error.item = item;\n callback(error);\n }\n return;\n }\n try {\n item.level = item.level || defaultLevel;\n this.telemeter._captureRollbarItem(item);\n item.telemetryEvents = this.telemeter.copyEvents();\n this.notifier.log(item, callback);\n } catch (e) {\n this.logger.error(e);\n }\n};\n\nRollbar.prototype._defaultLogLevel = function() {\n return this.options.logLevel || 'debug';\n};\n\nRollbar.prototype._sameAsLastError = function(item) {\n if (!item._isUncaught) {\n return false;\n }\n var itemHash = generateItemHash(item);\n if (this.lastErrorHash === itemHash) {\n return true;\n }\n this.lastError = item.err;\n this.lastErrorHash = itemHash;\n return false;\n};\n\nfunction generateItemHash(item) {\n var message = item.message || '';\n var stack = (item.err || {}).stack || String(item.err);\n return message + '::' + stack;\n}\n\nmodule.exports = Rollbar;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rollbar.js\n// module id = 3\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * RateLimiter - an object that encapsulates the logic for counting items sent to Rollbar\n *\n * @param options - the same options that are accepted by configureGlobal offered as a convenience\n */\nfunction RateLimiter(options) {\n this.startTime = _.now();\n this.counter = 0;\n this.perMinCounter = 0;\n this.platform = null;\n this.platformOptions = {};\n this.configureGlobal(options);\n}\n\nRateLimiter.globalSettings = {\n startTime: _.now(),\n maxItems: undefined,\n itemsPerMinute: undefined\n};\n\n/*\n * configureGlobal - set the global rate limiter options\n *\n * @param options - Only the following values are recognized:\n * startTime: a timestamp of the form returned by (new Date()).getTime()\n * maxItems: the maximum items\n * itemsPerMinute: the max number of items to send in a given minute\n */\nRateLimiter.prototype.configureGlobal = function(options) {\n if (options.startTime !== undefined) {\n RateLimiter.globalSettings.startTime = options.startTime;\n }\n if (options.maxItems !== undefined) {\n RateLimiter.globalSettings.maxItems = options.maxItems;\n }\n if (options.itemsPerMinute !== undefined) {\n RateLimiter.globalSettings.itemsPerMinute = options.itemsPerMinute;\n }\n};\n\n/*\n * shouldSend - determine if we should send a given item based on rate limit settings\n *\n * @param item - the item we are about to send\n * @returns An object with the following structure:\n * error: (Error|null)\n * shouldSend: bool\n * payload: (Object|null)\n * If shouldSend is false, the item passed as a parameter should not be sent to Rollbar, and\n * exactly one of error or payload will be non-null. If error is non-null, the returned Error will\n * describe the situation, but it means that we were already over a rate limit (either globally or\n * per minute) when this item was checked. If error is null, and therefore payload is non-null, it\n * means this item put us over the global rate limit and the payload should be sent to Rollbar in\n * place of the passed in item.\n */\nRateLimiter.prototype.shouldSend = function(item, now) {\n now = now || _.now();\n var elapsedTime = now - this.startTime;\n if (elapsedTime < 0 || elapsedTime >= 60000) {\n this.startTime = now;\n this.perMinCounter = 0;\n }\n\n var globalRateLimit = RateLimiter.globalSettings.maxItems;\n var globalRateLimitPerMin = RateLimiter.globalSettings.itemsPerMinute;\n\n if (checkRate(item, globalRateLimit, this.counter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimit + ' max items reached', false);\n } else if (checkRate(item, globalRateLimitPerMin, this.perMinCounter)) {\n return shouldSendValue(this.platform, this.platformOptions, globalRateLimitPerMin + ' items per minute reached', false);\n }\n this.counter++;\n this.perMinCounter++;\n\n var shouldSend = !checkRate(item, globalRateLimit, this.counter);\n var perMinute = shouldSend;\n shouldSend = shouldSend && !checkRate(item, globalRateLimitPerMin, this.perMinCounter);\n return shouldSendValue(this.platform, this.platformOptions, null, shouldSend, globalRateLimit, globalRateLimitPerMin, perMinute);\n};\n\nRateLimiter.prototype.setPlatformOptions = function(platform, options) {\n this.platform = platform;\n this.platformOptions = options;\n};\n\n/* Helpers */\n\nfunction checkRate(item, limit, counter) {\n return !item.ignoreRateLimit && limit >= 1 && counter > limit;\n}\n\nfunction shouldSendValue(platform, options, error, shouldSend, globalRateLimit, limitPerMin, perMinute) {\n var payload = null;\n if (error) {\n error = new Error(error);\n }\n if (!error && !shouldSend) {\n payload = rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute);\n }\n return {error: error, shouldSend: shouldSend, payload: payload};\n}\n\nfunction rateLimitPayload(platform, options, globalRateLimit, limitPerMin, perMinute) {\n var environment = options.environment || (options.payload && options.payload.environment);\n var msg;\n if (perMinute) {\n msg = 'item per minute limit reached, ignoring errors until timeout';\n } else {\n msg = 'maxItems has been hit, ignoring errors until reset.';\n }\n var item = {\n body: {\n message: {\n body: msg,\n extra: {\n maxItems: globalRateLimit,\n itemsPerMinute: limitPerMin\n }\n }\n },\n language: 'javascript',\n environment: environment,\n notifier: {\n version: (options.notifier && options.notifier.version) || options.version\n }\n };\n if (platform === 'browser') {\n item.platform = 'browser';\n item.framework = 'browser-js';\n item.notifier.name = 'rollbar-browser-js';\n } else if (platform === 'server') {\n item.framework = options.framework || 'node-js';\n item.notifier.name = options.notifier.name;\n } else if (platform === 'react-native') {\n item.framework = options.framework || 'react-native';\n item.notifier.name = options.notifier.name;\n }\n return item;\n}\n\nmodule.exports = RateLimiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/rateLimiter.js\n// module id = 4\n// module chunks = 0","'use strict';\n\nvar merge = require('./merge');\n\nvar RollbarJSON = {};\nvar __initRollbarJSON = false;\nfunction setupJSON() {\n if (__initRollbarJSON) {\n return;\n }\n __initRollbarJSON = true;\n\n if (isDefined(JSON)) {\n if (isNativeFunction(JSON.stringify)) {\n RollbarJSON.stringify = JSON.stringify;\n }\n if (isNativeFunction(JSON.parse)) {\n RollbarJSON.parse = JSON.parse;\n }\n }\n if (!isFunction(RollbarJSON.stringify) || !isFunction(RollbarJSON.parse)) {\n var setupCustomJSON = require('../vendor/JSON-js/json3.js');\n setupCustomJSON(RollbarJSON);\n }\n}\nsetupJSON();\n\n/*\n * isType - Given a Javascript value and a string, returns true if the type of the value matches the\n * given string.\n *\n * @param x - any value\n * @param t - a lowercase string containing one of the following type names:\n * - undefined\n * - null\n * - error\n * - number\n * - boolean\n * - string\n * - symbol\n * - function\n * - object\n * - array\n * @returns true if x is of type t, otherwise false\n */\nfunction isType(x, t) {\n return t === typeName(x);\n}\n\n/*\n * typeName - Given a Javascript value, returns the type of the object as a string\n */\nfunction typeName(x) {\n var name = typeof x;\n if (name !== 'object') {\n return name;\n }\n if (!x) {\n return 'null';\n }\n if (x instanceof Error) {\n return 'error';\n }\n return ({}).toString.call(x).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n}\n\n/* isFunction - a convenience function for checking if a value is a function\n *\n * @param f - any value\n * @returns true if f is a function, otherwise false\n */\nfunction isFunction(f) {\n return isType(f, 'function');\n}\n\n/* isNativeFunction - a convenience function for checking if a value is a native JS function\n *\n * @param f - any value\n * @returns true if f is a native JS function, otherwise false\n */\nfunction isNativeFunction(f) {\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var funcMatchString = Function.prototype.toString.call(Object.prototype.hasOwnProperty)\n .replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?');\n var reIsNative = RegExp('^' + funcMatchString + '$');\n return isObject(f) && reIsNative.test(f);\n}\n\n/* isObject - Checks if the argument is an object\n *\n * @param value - any value\n * @returns true is value is an object function is an object)\n*/\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/*\n * isDefined - a convenience function for checking if a value is not equal to undefined\n *\n * @param u - any value\n * @returns true if u is anything other than undefined\n */\nfunction isDefined(u) {\n return !isType(u, 'undefined');\n}\n\n/*\n * isIterable - convenience function for checking if a value can be iterated, essentially\n * whether it is an object or an array.\n *\n * @param i - any value\n * @returns true if i is an object or an array as determined by `typeName`\n */\nfunction isIterable(i) {\n var type = typeName(i);\n return (type === 'object' || type === 'array');\n}\n\n/*\n * isError - convenience function for checking if a value is of an error type\n *\n * @param e - any value\n * @returns true if e is an error\n */\nfunction isError(e) {\n // Detect both Error and Firefox Exception type\n return isType(e, 'error') || isType(e, 'exception');\n}\n\nfunction traverse(obj, func, seen) {\n var k, v, i;\n var isObj = isType(obj, 'object');\n var isArray = isType(obj, 'array');\n var keys = [];\n\n if (isObj && seen.indexOf(obj) !== -1) {\n return obj;\n }\n seen.push(obj);\n\n if (isObj) {\n for (k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n }\n } else if (isArray) {\n for (i = 0; i < obj.length; ++i) {\n keys.push(i);\n }\n }\n\n var result = isObj ? {} : [];\n var same = true;\n for (i = 0; i < keys.length; ++i) {\n k = keys[i];\n v = obj[k];\n result[k] = func(k, v, seen);\n same = same && result[k] === obj[k];\n }\n\n return (keys.length != 0 && !same) ? result : obj;\n}\n\nfunction redact() {\n return '********';\n}\n\n// from http://stackoverflow.com/a/8809472/1138191\nfunction uuid4() {\n var d = now();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);\n });\n return uuid;\n}\n\nvar LEVELS = {\n debug: 0,\n info: 1,\n warning: 2,\n error: 3,\n critical: 4\n};\n\nfunction sanitizeUrl(url) {\n var baseUrlParts = parseUri(url);\n if (!baseUrlParts) {\n return '(unknown)';\n }\n\n // remove a trailing # if there is no anchor\n if (baseUrlParts.anchor === '') {\n baseUrlParts.source = baseUrlParts.source.replace('#', '');\n }\n\n url = baseUrlParts.source.replace('?' + baseUrlParts.query, '');\n return url;\n}\n\nvar parseUriOptions = {\n strictMode: false,\n key: [\n 'source',\n 'protocol',\n 'authority',\n 'userInfo',\n 'user',\n 'password',\n 'host',\n 'port',\n 'relative',\n 'path',\n 'directory',\n 'file',\n 'query',\n 'anchor'\n ],\n q: {\n name: 'queryKey',\n parser: /(?:^|&)([^&=]*)=?([^&]*)/g\n },\n parser: {\n strict: /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,\n loose: /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/\n }\n};\n\nfunction parseUri(str) {\n if (!isType(str, 'string')) {\n return undefined;\n }\n\n var o = parseUriOptions;\n var m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str);\n var uri = {};\n\n for (var i = 0, l = o.key.length; i < l; ++i) {\n uri[o.key[i]] = m[i] || '';\n }\n\n uri[o.q.name] = {};\n uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {\n if ($1) {\n uri[o.q.name][$1] = $2;\n }\n });\n\n return uri;\n}\n\nfunction addParamsAndAccessTokenToPath(accessToken, options, params) {\n params = params || {};\n params.access_token = accessToken;\n var paramsArray = [];\n var k;\n for (k in params) {\n if (Object.prototype.hasOwnProperty.call(params, k)) {\n paramsArray.push([k, params[k]].join('='));\n }\n }\n var query = '?' + paramsArray.sort().join('&');\n\n options = options || {};\n options.path = options.path || '';\n var qs = options.path.indexOf('?');\n var h = options.path.indexOf('#');\n var p;\n if (qs !== -1 && (h === -1 || h > qs)) {\n p = options.path;\n options.path = p.substring(0,qs) + query + '&' + p.substring(qs+1);\n } else {\n if (h !== -1) {\n p = options.path;\n options.path = p.substring(0,h) + query + p.substring(h);\n } else {\n options.path = options.path + query;\n }\n }\n}\n\nfunction formatUrl(u, protocol) {\n protocol = protocol || u.protocol;\n if (!protocol && u.port) {\n if (u.port === 80) {\n protocol = 'http:';\n } else if (u.port === 443) {\n protocol = 'https:';\n }\n }\n protocol = protocol || 'https:';\n\n if (!u.hostname) {\n return null;\n }\n var result = protocol + '//' + u.hostname;\n if (u.port) {\n result = result + ':' + u.port;\n }\n if (u.path) {\n result = result + u.path;\n }\n return result;\n}\n\nfunction stringify(obj, backup) {\n var value, error;\n try {\n value = RollbarJSON.stringify(obj);\n } catch (jsonError) {\n if (backup && isFunction(backup)) {\n try {\n value = backup(obj);\n } catch (backupError) {\n error = backupError;\n }\n } else {\n error = jsonError;\n }\n }\n return {error: error, value: value};\n}\n\nfunction jsonParse(s) {\n var value, error;\n try {\n value = RollbarJSON.parse(s);\n } catch (e) {\n error = e;\n }\n return {error: error, value: value};\n}\n\nfunction makeUnhandledStackInfo(\n message,\n url,\n lineno,\n colno,\n error,\n mode,\n backupMessage,\n errorParser\n) {\n var location = {\n url: url || '',\n line: lineno,\n column: colno\n };\n location.func = errorParser.guessFunctionName(location.url, location.line);\n location.context = errorParser.gatherContext(location.url, location.line);\n var href = document && document.location && document.location.href;\n var useragent = window && window.navigator && window.navigator.userAgent;\n return {\n 'mode': mode,\n 'message': error ? String(error) : (message || backupMessage),\n 'url': href,\n 'stack': [location],\n 'useragent': useragent\n };\n}\n\nfunction wrapCallback(logger, f) {\n return function(err, resp) {\n try {\n f(err, resp);\n } catch (e) {\n logger.error(e);\n }\n };\n}\n\nfunction createItem(args, logger, notifier, requestKeys, lambdaContext) {\n var message, err, custom, callback, request;\n var arg;\n var extraArgs = [];\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'undefined':\n break;\n case 'string':\n message ? extraArgs.push(arg) : message = arg;\n break;\n case 'function':\n callback = wrapCallback(logger, arg);\n break;\n case 'date':\n extraArgs.push(arg);\n break;\n case 'error':\n case 'domexception':\n case 'exception': // Firefox Exception type\n err ? extraArgs.push(arg) : err = arg;\n break;\n case 'object':\n case 'array':\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n if (requestKeys && typ === 'object' && !request) {\n for (var j = 0, len = requestKeys.length; j < len; ++j) {\n if (arg[requestKeys[j]] !== undefined) {\n request = arg;\n break;\n }\n }\n if (request) {\n break;\n }\n }\n custom ? extraArgs.push(arg) : custom = arg;\n break;\n default:\n if (arg instanceof Error || (typeof DOMException !== 'undefined' && arg instanceof DOMException)) {\n err ? extraArgs.push(arg) : err = arg;\n break;\n }\n extraArgs.push(arg);\n }\n }\n\n if (extraArgs.length > 0) {\n // if custom is an array this turns it into an object with integer keys\n custom = merge(custom);\n custom.extraArgs = extraArgs;\n }\n\n var item = {\n message: message,\n err: err,\n custom: custom,\n timestamp: now(),\n callback: callback,\n uuid: uuid4()\n };\n if (custom && custom.level !== undefined) {\n item.level = custom.level;\n delete custom.level;\n }\n if (requestKeys && request) {\n item.request = request;\n }\n if (lambdaContext) {\n item.lambdaContext = lambdaContext;\n }\n item._originalArgs = args;\n return item;\n}\n\nvar TELEMETRY_TYPES = ['log', 'network', 'dom', 'navigation', 'error', 'manual'];\nvar TELEMETRY_LEVELS = ['critical', 'error', 'warning', 'info', 'debug'];\n\nfunction arrayIncludes(arr, val) {\n for (var k = 0; k < arr.length; ++k) {\n if (arr[k] === val) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createTelemetryEvent(args) {\n var type, metadata, level;\n var arg;\n\n for (var i = 0, l = args.length; i < l; ++i) {\n arg = args[i];\n\n var typ = typeName(arg);\n switch (typ) {\n case 'string':\n if (arrayIncludes(TELEMETRY_TYPES, arg)) {\n type = arg;\n } else if (arrayIncludes(TELEMETRY_LEVELS, arg)) {\n level = arg;\n }\n break;\n case 'object':\n metadata = arg;\n break;\n default:\n break;\n }\n }\n var event = {\n type: type || 'manual',\n metadata: metadata || {},\n level: level\n };\n\n return event;\n}\n\n/*\n * get - given an obj/array and a keypath, return the value at that keypath or\n * undefined if not possible.\n *\n * @param obj - an object or array\n * @param path - a string of keys separated by '.' such as 'plugin.jquery.0.message'\n * which would correspond to 42 in `{plugin: {jquery: [{message: 42}]}}`\n */\nfunction get(obj, path) {\n if (!obj) {\n return undefined;\n }\n var keys = path.split('.');\n var result = obj;\n try {\n for (var i = 0, len = keys.length; i < len; ++i) {\n result = result[keys[i]];\n }\n } catch (e) {\n result = undefined;\n }\n return result;\n}\n\nfunction set(obj, path, value) {\n if (!obj) {\n return;\n }\n var keys = path.split('.');\n var len = keys.length;\n if (len < 1) {\n return;\n }\n if (len === 1) {\n obj[keys[0]] = value;\n return;\n }\n try {\n var temp = obj[keys[0]] || {};\n var replacement = temp;\n for (var i = 1; i < len - 1; ++i) {\n temp[keys[i]] = temp[keys[i]] || {};\n temp = temp[keys[i]];\n }\n temp[keys[len-1]] = value;\n obj[keys[0]] = replacement;\n } catch (e) {\n return;\n }\n}\n\nfunction scrub(data, scrubFields) {\n scrubFields = scrubFields || [];\n var paramRes = _getScrubFieldRegexs(scrubFields);\n var queryRes = _getScrubQueryParamRegexs(scrubFields);\n\n function redactQueryParam(dummy0, paramPart) {\n return paramPart + redact();\n }\n\n function paramScrubber(v) {\n var i;\n if (isType(v, 'string')) {\n for (i = 0; i < queryRes.length; ++i) {\n v = v.replace(queryRes[i], redactQueryParam);\n }\n }\n return v;\n }\n\n function valScrubber(k, v) {\n var i;\n for (i = 0; i < paramRes.length; ++i) {\n if (paramRes[i].test(k)) {\n v = redact();\n break;\n }\n }\n return v;\n }\n\n function scrubber(k, v, seen) {\n var tmpV = valScrubber(k, v);\n if (tmpV === v) {\n if (isType(v, 'object') || isType(v, 'array')) {\n return traverse(v, scrubber, seen);\n }\n return paramScrubber(tmpV);\n } else {\n return tmpV;\n }\n }\n\n return traverse(data, scrubber, []);\n}\n\nfunction _getScrubFieldRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '^\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?$';\n ret.push(new RegExp(pat, 'i'));\n }\n return ret;\n}\n\n\nfunction _getScrubQueryParamRegexs(scrubFields) {\n var ret = [];\n var pat;\n for (var i = 0; i < scrubFields.length; ++i) {\n pat = '\\\\[?(%5[bB])?' + scrubFields[i] + '\\\\[?(%5[bB])?\\\\]?(%5[dD])?';\n ret.push(new RegExp('(' + pat + '=)([^&\\\\n]+)', 'igm'));\n }\n return ret;\n}\n\nfunction formatArgsAsString(args) {\n var i, len, arg;\n var result = [];\n for (i = 0, len = args.length; i < len; ++i) {\n arg = args[i];\n switch (typeName(arg)) {\n case 'object':\n arg = stringify(arg);\n arg = arg.error || arg.value;\n if (arg.length > 500) {\n arg = arg.substr(0, 497) + '...';\n }\n break;\n case 'null':\n arg = 'null';\n break;\n case 'undefined':\n arg = 'undefined';\n break;\n case 'symbol':\n arg = arg.toString();\n break;\n }\n result.push(arg);\n }\n return result.join(' ');\n}\n\nfunction now() {\n if (Date.now) {\n return +Date.now();\n }\n return +new Date();\n}\n\nfunction filterIp(requestData, captureIp) {\n if (!requestData || !requestData['user_ip'] || captureIp === true) {\n return;\n }\n var newIp = requestData['user_ip'];\n if (!captureIp) {\n newIp = null;\n } else {\n try {\n var parts;\n if (newIp.indexOf('.') !== -1) {\n parts = newIp.split('.');\n parts.pop();\n parts.push('0');\n newIp = parts.join('.');\n } else if (newIp.indexOf(':') !== -1) {\n parts = newIp.split(':');\n if (parts.length > 2) {\n var beginning = parts.slice(0, 3);\n var slashIdx = beginning[2].indexOf('/');\n if (slashIdx !== -1) {\n beginning[2] = beginning[2].substring(0, slashIdx);\n }\n var terminal = '0000:0000:0000:0000:0000';\n newIp = beginning.concat(terminal).join(':');\n }\n } else {\n newIp = null;\n }\n } catch (e) {\n newIp = null;\n }\n }\n requestData['user_ip'] = newIp;\n}\n\nfunction handleOptions(current, input, payload) {\n var result = merge(current, input, payload);\n if (!input || input.overwriteScrubFields) {\n return result;\n }\n if (input.scrubFields) {\n result.scrubFields = (current.scrubFields || []).concat(input.scrubFields);\n }\n return result;\n}\n\nmodule.exports = {\n addParamsAndAccessTokenToPath: addParamsAndAccessTokenToPath,\n createItem: createItem,\n createTelemetryEvent: createTelemetryEvent,\n filterIp: filterIp,\n formatArgsAsString: formatArgsAsString,\n formatUrl: formatUrl,\n get: get,\n handleOptions: handleOptions,\n isError: isError,\n isFunction: isFunction,\n isIterable: isIterable,\n isNativeFunction: isNativeFunction,\n isType: isType,\n jsonParse: jsonParse,\n LEVELS: LEVELS,\n makeUnhandledStackInfo: makeUnhandledStackInfo,\n merge: merge,\n now: now,\n redact: redact,\n sanitizeUrl: sanitizeUrl,\n scrub: scrub,\n set: set,\n stringify: stringify,\n traverse: traverse,\n typeName: typeName,\n uuid4: uuid4\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utility.js\n// module id = 5\n// module chunks = 0","'use strict';\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nfunction merge() {\n var i, src, copy, clone, name,\n result = {},\n current = null,\n length = arguments.length;\n\n for (i=0; i < length; i++) {\n current = arguments[i];\n if (current == null) {\n continue;\n }\n\n for (name in current) {\n src = result[name];\n copy = current[name];\n if (result !== copy) {\n if (copy && isPlainObject(copy)) {\n clone = src && isPlainObject(src) ? src : {};\n result[name] = merge(clone, copy);\n } else if (typeof copy !== 'undefined') {\n result[name] = copy;\n }\n }\n }\n }\n return result;\n}\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/merge.js\n// module id = 6\n// module chunks = 0","// json3.js\n// 2017-02-21\n// Public Domain.\n// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n// See http://www.JSON.org/js.html\n// This code should be minified before deployment.\n// See http://javascript.crockford.com/jsmin.html\n\n// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n// NOT CONTROL.\n\n// This file creates a global JSON object containing two methods: stringify\n// and parse. This file provides the ES5 JSON capability to ES3 systems.\n// If a project might run on IE8 or earlier, then this file should be included.\n// This file does nothing on ES5 systems.\n\n// JSON.stringify(value, replacer, space)\n// value any JavaScript value, usually an object or array.\n// replacer an optional parameter that determines how object\n// values are stringified for objects. It can be a\n// function or an array of strings.\n// space an optional parameter that specifies the indentation\n// of nested structures. If it is omitted, the text will\n// be packed without extra whitespace. If it is a number,\n// it will specify the number of spaces to indent at each\n// level. If it is a string (such as \"\\t\" or \" \"),\n// it contains the characters used to indent at each level.\n// This method produces a JSON text from a JavaScript value.\n// When an object value is found, if the object contains a toJSON\n// method, its toJSON method will be called and the result will be\n// stringified. A toJSON method does not serialize: it returns the\n// value represented by the name/value pair that should be serialized,\n// or undefined if nothing should be serialized. The toJSON method\n// will be passed the key associated with the value, and this will be\n// bound to the value.\n\n// For example, this would serialize Dates as ISO strings.\n\n// Date.prototype.toJSON = function (key) {\n// function f(n) {\n// // Format integers to have at least two digits.\n// return (n < 10)\n// ? \"0\" + n\n// : n;\n// }\n// return this.getUTCFullYear() + \"-\" +\n// f(this.getUTCMonth() + 1) + \"-\" +\n// f(this.getUTCDate()) + \"T\" +\n// f(this.getUTCHours()) + \":\" +\n// f(this.getUTCMinutes()) + \":\" +\n// f(this.getUTCSeconds()) + \"Z\";\n// };\n\n// You can provide an optional replacer method. It will be passed the\n// key and value of each member, with this bound to the containing\n// object. The value that is returned from your method will be\n// serialized. If your method returns undefined, then the member will\n// be excluded from the serialization.\n\n// If the replacer parameter is an array of strings, then it will be\n// used to select the members to be serialized. It filters the results\n// such that only members with keys listed in the replacer array are\n// stringified.\n\n// Values that do not have JSON representations, such as undefined or\n// functions, will not be serialized. Such values in objects will be\n// dropped; in arrays they will be replaced with null. You can use\n// a replacer function to replace those with JSON values.\n\n// JSON.stringify(undefined) returns undefined.\n\n// The optional space parameter produces a stringification of the\n// value that is filled with line breaks and indentation to make it\n// easier to read.\n\n// If the space parameter is a non-empty string, then that string will\n// be used for indentation. If the space parameter is a number, then\n// the indentation will be that many spaces.\n\n// Example:\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}]);\n// // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n// text = JSON.stringify([\"e\", {pluribus: \"unum\"}], null, \"\\t\");\n// // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n// text = JSON.stringify([new Date()], function (key, value) {\n// return this[key] instanceof Date\n// ? \"Date(\" + this[key] + \")\"\n// : value;\n// });\n// // text is '[\"Date(---current time---)\"]'\n\n// JSON.parse(text, reviver)\n// This method parses a JSON text to produce an object or array.\n// It can throw a SyntaxError exception.\n// This has been modified to use JSON-js/json_parse_state.js as the\n// parser instead of the one built around eval found in JSON-js/json2.js\n\n// The optional reviver parameter is a function that can filter and\n// transform the results. It receives each of the keys and values,\n// and its return value is used instead of the original value.\n// If it returns what it received, then the structure is not modified.\n// If it returns undefined then the member is deleted.\n\n// Example:\n\n// // Parse the text. Values that look like ISO date strings will\n// // be converted to Date objects.\n\n// myData = JSON.parse(text, function (key, value) {\n// var a;\n// if (typeof value === \"string\") {\n// a =\n// /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n// if (a) {\n// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n// +a[5], +a[6]));\n// }\n// }\n// return value;\n// });\n\n// myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n// var d;\n// if (typeof value === \"string\" &&\n// value.slice(0, 5) === \"Date(\" &&\n// value.slice(-1) === \")\") {\n// d = new Date(value.slice(5, -1));\n// if (d) {\n// return d;\n// }\n// }\n// return value;\n// });\n\n// This is a reference implementation. You are free to copy, modify, or\n// redistribute.\n\n/*jslint\n for, this\n */\n\n/*property\n JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n */\n\nvar setupCustomJSON = function(JSON) {\n\n var rx_one = /^[\\],:{}\\s]*$/;\n var rx_two = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g;\n var rx_three = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g;\n var rx_four = /(?:^|:|,)(?:\\s*\\[)+/g;\n var rx_escapable = /[\\\\\"\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var rx_dangerous = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10\n ? \"0\" + n\n : n;\n }\n\n function this_value() {\n return this.valueOf();\n }\n\n if (typeof Date.prototype.toJSON !== \"function\") {\n\n Date.prototype.toJSON = function () {\n\n return isFinite(this.valueOf())\n ? this.getUTCFullYear() + \"-\" +\n f(this.getUTCMonth() + 1) + \"-\" +\n f(this.getUTCDate()) + \"T\" +\n f(this.getUTCHours()) + \":\" +\n f(this.getUTCMinutes()) + \":\" +\n f(this.getUTCSeconds()) + \"Z\"\n : null;\n };\n\n Boolean.prototype.toJSON = this_value;\n Number.prototype.toJSON = this_value;\n String.prototype.toJSON = this_value;\n }\n\n var gap;\n var indent;\n var meta;\n var rep;\n\n\n function quote(string) {\n\n // If the string contains no control characters, no quote characters, and no\n // backslash characters, then we can safely slap some quotes around it.\n // Otherwise we must also replace the offending characters with safe escape\n // sequences.\n\n rx_escapable.lastIndex = 0;\n return rx_escapable.test(string)\n ? \"\\\"\" + string.replace(rx_escapable, function (a) {\n var c = meta[a];\n return typeof c === \"string\"\n ? c\n : \"\\\\u\" + (\"0000\" + a.charCodeAt(0).toString(16)).slice(-4);\n }) + \"\\\"\"\n : \"\\\"\" + string + \"\\\"\";\n }\n\n\n function str(key, holder) {\n\n // Produce a string from holder[key].\n\n var i; // The loop counter.\n var k; // The member key.\n var v; // The member value.\n var length;\n var mind = gap;\n var partial;\n var value = holder[key];\n\n // If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === \"object\" &&\n typeof value.toJSON === \"function\") {\n value = value.toJSON(key);\n }\n\n // If we were called with a replacer function, then call the replacer to\n // obtain a replacement value.\n\n if (typeof rep === \"function\") {\n value = rep.call(holder, key, value);\n }\n\n // What happens next depends on the value's type.\n\n switch (typeof value) {\n case \"string\":\n return quote(value);\n\n case \"number\":\n\n // JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value)\n ? String(value)\n : \"null\";\n\n case \"boolean\":\n case \"null\":\n\n // If the value is a boolean or null, convert it to a string. Note:\n // typeof null does not produce \"null\". The case is included here in\n // the remote chance that this gets fixed someday.\n\n return String(value);\n\n // If the type is \"object\", we might be dealing with an object or an array or\n // null.\n\n case \"object\":\n\n // Due to a specification blunder in ECMAScript, typeof null is \"object\",\n // so watch out for that case.\n\n if (!value) {\n return \"null\";\n }\n\n // Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n // Is the value an array?\n\n if (Object.prototype.toString.apply(value) === \"[object Array]\") {\n\n // The value is an array. Stringify every element. Use null as a placeholder\n // for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || \"null\";\n }\n\n // Join all of the elements together, separated with commas, and wrap them in\n // brackets.\n\n v = partial.length === 0\n ? \"[]\"\n : gap\n ? \"[\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"]\"\n : \"[\" + partial.join(\",\") + \"]\";\n gap = mind;\n return v;\n }\n\n // If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === \"object\") {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === \"string\") {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n } else {\n\n // Otherwise, iterate through all of the keys in the object.\n\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (\n gap\n ? \": \"\n : \":\"\n ) + v);\n }\n }\n }\n }\n\n // Join all of the member texts together, separated with commas,\n // and wrap them in braces.\n\n v = partial.length === 0\n ? \"{}\"\n : gap\n ? \"{\\n\" + gap + partial.join(\",\\n\" + gap) + \"\\n\" + mind + \"}\"\n : \"{\" + partial.join(\",\") + \"}\";\n gap = mind;\n return v;\n }\n }\n\n // If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== \"function\") {\n meta = { // table of character substitutions\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n JSON.stringify = function (value, replacer, space) {\n\n // The stringify method takes a value and an optional replacer, and an optional\n // space parameter, and returns a JSON text. The replacer can be a function\n // that can replace values, or an array of strings that will select the keys.\n // A default replacer method can be provided. Use of the space parameter can\n // produce text that is more easily readable.\n\n var i;\n gap = \"\";\n indent = \"\";\n\n // If the space parameter is a number, make an indent string containing that\n // many spaces.\n\n if (typeof space === \"number\") {\n for (i = 0; i < space; i += 1) {\n indent += \" \";\n }\n\n // If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === \"string\") {\n indent = space;\n }\n\n // If there is a replacer, it must be a function or an array.\n // Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== \"function\" &&\n (typeof replacer !== \"object\" ||\n typeof replacer.length !== \"number\")) {\n throw new Error(\"JSON.stringify\");\n }\n\n // Make a fake root object containing our value under the key of \"\".\n // Return the result of stringifying the value.\n\n return str(\"\", {\"\": value});\n };\n }\n\n\n // If the JSON object does not yet have a parse method, give it one.\n\n if (typeof JSON.parse !== \"function\") {\n JSON.parse = (function () {\n\n // This function creates a JSON parse function that uses a state machine rather\n // than the dangerous eval function to parse a JSON text.\n\n var state; // The state of the parser, one of\n // 'go' The starting state\n // 'ok' The final, accepting state\n // 'firstokey' Ready for the first key of the object or\n // the closing of an empty object\n // 'okey' Ready for the next key of the object\n // 'colon' Ready for the colon\n // 'ovalue' Ready for the value half of a key/value pair\n // 'ocomma' Ready for a comma or closing }\n // 'firstavalue' Ready for the first value of an array or\n // an empty array\n // 'avalue' Ready for the next value of an array\n // 'acomma' Ready for a comma or closing ]\n var stack; // The stack, for controlling nesting.\n var container; // The current container object or array\n var key; // The current key\n var value; // The current value\n var escapes = { // Escapement translation table\n \"\\\\\": \"\\\\\",\n \"\\\"\": \"\\\"\",\n \"/\": \"/\",\n \"t\": \"\\t\",\n \"n\": \"\\n\",\n \"r\": \"\\r\",\n \"f\": \"\\f\",\n \"b\": \"\\b\"\n };\n var string = { // The actions for string tokens\n go: function () {\n state = \"ok\";\n },\n firstokey: function () {\n key = value;\n state = \"colon\";\n },\n okey: function () {\n key = value;\n state = \"colon\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var number = { // The actions for number tokens\n go: function () {\n state = \"ok\";\n },\n ovalue: function () {\n state = \"ocomma\";\n },\n firstavalue: function () {\n state = \"acomma\";\n },\n avalue: function () {\n state = \"acomma\";\n }\n };\n var action = {\n\n // The action table describes the behavior of the machine. It contains an\n // object for each token. Each object contains a method that is called when\n // a token is matched in a state. An object will lack a method for illegal\n // states.\n\n \"{\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = {};\n state = \"firstokey\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = {};\n state = \"firstokey\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = {};\n state = \"firstokey\";\n }\n },\n \"}\": {\n firstokey: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n ocomma: function () {\n var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \"[\": {\n go: function () {\n stack.push({state: \"ok\"});\n container = [];\n state = \"firstavalue\";\n },\n ovalue: function () {\n stack.push({container: container, state: \"ocomma\", key: key});\n container = [];\n state = \"firstavalue\";\n },\n firstavalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n },\n avalue: function () {\n stack.push({container: container, state: \"acomma\"});\n container = [];\n state = \"firstavalue\";\n }\n },\n \"]\": {\n firstavalue: function () {\n var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n },\n acomma: function () {\n var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state;\n }\n },\n \":\": {\n colon: function () {\n if (Object.hasOwnProperty.call(container, key)) {\n throw new SyntaxError(\"Duplicate key '\" + key + \"\\\"\");\n }\n state = \"ovalue\";\n }\n },\n \",\": {\n ocomma: function () {\n container[key] = value;\n state = \"okey\";\n },\n acomma: function () {\n container.push(value);\n state = \"avalue\";\n }\n },\n \"true\": {\n go: function () {\n value = true;\n state = \"ok\";\n },\n ovalue: function () {\n value = true;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = true;\n state = \"acomma\";\n },\n avalue: function () {\n value = true;\n state = \"acomma\";\n }\n },\n \"false\": {\n go: function () {\n value = false;\n state = \"ok\";\n },\n ovalue: function () {\n value = false;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = false;\n state = \"acomma\";\n },\n avalue: function () {\n value = false;\n state = \"acomma\";\n }\n },\n \"null\": {\n go: function () {\n value = null;\n state = \"ok\";\n },\n ovalue: function () {\n value = null;\n state = \"ocomma\";\n },\n firstavalue: function () {\n value = null;\n state = \"acomma\";\n },\n avalue: function () {\n value = null;\n state = \"acomma\";\n }\n }\n };\n\n function debackslashify(text) {\n\n // Remove and replace any backslash escapement.\n\n return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function (ignore, b, c) {\n return b\n ? String.fromCharCode(parseInt(b, 16))\n : escapes[c];\n });\n }\n\n return function (source, reviver) {\n\n // A regular expression is used to extract tokens from the JSON text.\n // The extraction process is cautious.\n\n var result;\n var tx = /^[\\u0020\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n\n // Set the starting state.\n\n state = \"go\";\n\n // The stack records the container, key, and state for each object or array\n // that contains another object or array while processing nested structures.\n\n stack = [];\n\n // If any error occurs, we will catch it and ultimately throw a syntax error.\n\n try {\n\n // For each token...\n\n while (true) {\n result = tx.exec(source);\n if (!result) {\n break;\n }\n\n // result is the result array from matching the tokenizing regular expression.\n // result[0] contains everything that matched, including any initial whitespace.\n // result[1] contains any punctuation that was matched, or true, false, or null.\n // result[2] contains a matched number, still in string form.\n // result[3] contains a matched string, without quotes but with escapement.\n\n if (result[1]) {\n\n // Token: Execute the action for this state and token.\n\n action[result[1]][state]();\n\n } else if (result[2]) {\n\n // Number token: Convert the number string into a number value and execute\n // the action for this state and number.\n\n value = +result[2];\n number[state]();\n } else {\n\n // String token: Replace the escapement sequences and execute the action for\n // this state and string.\n\n value = debackslashify(result[3]);\n string[state]();\n }\n\n // Remove the token from the string. The loop will continue as long as there\n // are tokens. This is a slow process, but it allows the use of ^ matching,\n // which assures that no illegal tokens slip through.\n\n source = source.slice(result[0].length);\n }\n\n // If we find a state/token combination that is illegal, then the action will\n // cause an error. We handle the error by simply changing the state.\n\n } catch (e) {\n state = e;\n }\n\n // The parsing is finished. If we are not in the final \"ok\" state, or if the\n // remaining source contains anything except whitespace, then we did not have\n //a well-formed JSON text.\n\n if (state !== \"ok\" || (/[^\\u0020\\t\\n\\r]/.test(source))) {\n throw (state instanceof SyntaxError)\n ? state\n : new SyntaxError(\"JSON\");\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the current\n // value in an empty key. If there is not a reviver function, we simply return\n // that value.\n\n return (typeof reviver === \"function\")\n ? (function walk(holder, key) {\n var k;\n var v;\n var val = holder[key];\n if (val && typeof val === \"object\") {\n for (k in value) {\n if (Object.prototype.hasOwnProperty.call(val, k)) {\n v = walk(val, k);\n if (v !== undefined) {\n val[k] = v;\n } else {\n delete val[k];\n }\n }\n }\n }\n return reviver.call(holder, key, val);\n }({\"\": value}, \"\"))\n : value;\n };\n }());\n }\n}\n\nmodule.exports = setupCustomJSON;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./vendor/JSON-js/json3.js\n// module id = 7\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Queue - an object which handles which handles a queue of items to be sent to Rollbar.\n * This object handles rate limiting via a passed in rate limiter, retries based on connection\n * errors, and filtering of items based on a set of configurable predicates. The communication to\n * the backend is performed via a given API object.\n *\n * @param rateLimiter - An object which conforms to the interface\n * rateLimiter.shouldSend(item) -> bool\n * @param api - An object which conforms to the interface\n * api.postItem(payload, function(err, response))\n * @param logger - An object used to log verbose messages if desired\n * @param options - see Queue.prototype.configure\n */\nfunction Queue(rateLimiter, api, logger, options) {\n this.rateLimiter = rateLimiter;\n this.api = api;\n this.logger = logger;\n this.options = options;\n this.predicates = [];\n this.pendingItems = [];\n this.pendingRequests = [];\n this.retryQueue = [];\n this.retryHandle = null;\n this.waitCallback = null;\n this.waitIntervalID = null;\n}\n\n/*\n * configure - updates the options this queue uses\n *\n * @param options\n */\nQueue.prototype.configure = function(options) {\n this.api && this.api.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addPredicate - adds a predicate to the end of the list of predicates for this queue\n *\n * @param predicate - function(item, options) -> (bool|{err: Error})\n * Returning true means that this predicate passes and the item is okay to go on the queue\n * Returning false means do not add the item to the queue, but it is not an error\n * Returning {err: Error} means do not add the item to the queue, and the given error explains why\n * Returning {err: undefined} is equivalent to returning true but don't do that\n */\nQueue.prototype.addPredicate = function(predicate) {\n if (_.isFunction(predicate)) {\n this.predicates.push(predicate);\n }\n return this;\n};\n\nQueue.prototype.addPendingItem = function(item) {\n this.pendingItems.push(item);\n};\n\nQueue.prototype.removePendingItem = function(item) {\n var idx = this.pendingItems.indexOf(item);\n if (idx !== -1) {\n this.pendingItems.splice(idx, 1);\n }\n};\n\n/*\n * addItem - Send an item to the Rollbar API if all of the predicates are satisfied\n *\n * @param item - The payload to send to the backend\n * @param callback - function(error, repsonse) which will be called with the response from the API\n * in the case of a success, otherwise response will be null and error will have a value. If both\n * error and response are null then the item was stopped by a predicate which did not consider this\n * to be an error condition, but nonetheless did not send the item to the API.\n * @param originalError - The original error before any transformations that is to be logged if any\n */\nQueue.prototype.addItem = function(item, callback, originalError, originalItem) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() { return; };\n }\n var predicateResult = this._applyPredicates(item);\n if (predicateResult.stop) {\n this.removePendingItem(originalItem);\n callback(predicateResult.err);\n return;\n }\n this._maybeLog(item, originalError);\n this.removePendingItem(originalItem);\n this.pendingRequests.push(item);\n try {\n this._makeApiRequest(item, function(err, resp) {\n this._dequeuePendingRequest(item);\n callback(err, resp);\n }.bind(this));\n } catch (e) {\n this._dequeuePendingRequest(item);\n callback(e);\n }\n};\n\n/*\n * wait - Stop any further errors from being added to the queue, and get called back when all items\n * currently processing have finished sending to the backend.\n *\n * @param callback - function() called when all pending items have been sent\n */\nQueue.prototype.wait = function(callback) {\n if (!_.isFunction(callback)) {\n return;\n }\n this.waitCallback = callback;\n if (this._maybeCallWait()) {\n return;\n }\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitIntervalID = setInterval(function() {\n this._maybeCallWait();\n }.bind(this), 500);\n};\n\n/* _applyPredicates - Sequentially applies the predicates that have been added to the queue to the\n * given item with the currently configured options.\n *\n * @param item - An item in the queue\n * @returns {stop: bool, err: (Error|null)} - stop being true means do not add item to the queue,\n * the error value should be passed up to a callbak if we are stopping.\n */\nQueue.prototype._applyPredicates = function(item) {\n var p = null;\n for (var i = 0, len = this.predicates.length; i < len; i++) {\n p = this.predicates[i](item, this.options);\n if (!p || p.err !== undefined) {\n return {stop: true, err: p.err};\n }\n }\n return {stop: false, err: null};\n};\n\n/*\n * _makeApiRequest - Send an item to Rollbar, callback when done, if there is an error make an\n * effort to retry if we are configured to do so.\n *\n * @param item - an item ready to send to the backend\n * @param callback - function(err, response)\n */\nQueue.prototype._makeApiRequest = function(item, callback) {\n var rateLimitResponse = this.rateLimiter.shouldSend(item);\n if (rateLimitResponse.shouldSend) {\n this.api.postItem(item, function(err, resp) {\n if (err) {\n this._maybeRetry(err, item, callback);\n } else {\n callback(err, resp);\n }\n }.bind(this));\n } else if (rateLimitResponse.error) {\n callback(rateLimitResponse.error);\n } else {\n this.api.postItem(rateLimitResponse.payload, callback);\n }\n};\n\n// These are errors basically mean there is no internet connection\nvar RETRIABLE_ERRORS = ['ECONNRESET', 'ENOTFOUND', 'ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNREFUSED', 'EHOSTUNREACH', 'EPIPE', 'EAI_AGAIN'];\n\n/*\n * _maybeRetry - Given the error returned by the API, decide if we should retry or just callback\n * with the error.\n *\n * @param err - an error returned by the API transport\n * @param item - the item that was trying to be sent when this error occured\n * @param callback - function(err, response)\n */\nQueue.prototype._maybeRetry = function(err, item, callback) {\n var shouldRetry = false;\n if (this.options.retryInterval) {\n for (var i = 0, len = RETRIABLE_ERRORS.length; i < len; i++) {\n if (err.code === RETRIABLE_ERRORS[i]) {\n shouldRetry = true;\n break;\n }\n }\n }\n if (shouldRetry) {\n this._retryApiRequest(item, callback);\n } else {\n callback(err);\n }\n};\n\n/*\n * _retryApiRequest - Add an item and a callback to a queue and possibly start a timer to process\n * that queue based on the retryInterval in the options for this queue.\n *\n * @param item - an item that failed to send due to an error we deem retriable\n * @param callback - function(err, response)\n */\nQueue.prototype._retryApiRequest = function(item, callback) {\n this.retryQueue.push({item: item, callback: callback});\n\n if (!this.retryHandle) {\n this.retryHandle = setInterval(function() {\n while (this.retryQueue.length) {\n var retryObject = this.retryQueue.shift();\n this._makeApiRequest(retryObject.item, retryObject.callback);\n }\n }.bind(this), this.options.retryInterval);\n }\n};\n\n/*\n * _dequeuePendingRequest - Removes the item from the pending request queue, this queue is used to\n * enable to functionality of providing a callback that clients can pass to `wait` to be notified\n * when the pending request queue has been emptied. This must be called when the API finishes\n * processing this item. If a `wait` callback is configured, it is called by this function.\n *\n * @param item - the item previously added to the pending request queue\n */\nQueue.prototype._dequeuePendingRequest = function(item) {\n var idx = this.pendingRequests.indexOf(item);\n if (idx !== -1) {\n this.pendingRequests.splice(idx, 1);\n this._maybeCallWait();\n }\n};\n\nQueue.prototype._maybeLog = function(data, originalError) {\n if (this.logger && this.options.verbose) {\n var message = originalError;\n message = message || _.get(data, 'body.trace.exception.message');\n message = message || _.get(data, 'body.trace_chain.0.exception.message');\n if (message) {\n this.logger.error(message);\n return;\n }\n message = _.get(data, 'body.message.body');\n if (message) {\n this.logger.log(message);\n }\n }\n};\n\nQueue.prototype._maybeCallWait = function() {\n if (_.isFunction(this.waitCallback) && this.pendingItems.length === 0 && this.pendingRequests.length === 0) {\n if (this.waitIntervalID) {\n this.waitIntervalID = clearInterval(this.waitIntervalID);\n }\n this.waitCallback();\n return true;\n }\n return false;\n};\n\nmodule.exports = Queue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/queue.js\n// module id = 8\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\n/*\n * Notifier - the internal object responsible for delegating between the client exposed API, the\n * chain of transforms necessary to turn an item into something that can be sent to Rollbar, and the\n * queue which handles the communcation with the Rollbar API servers.\n *\n * @param queue - an object that conforms to the interface: addItem(item, callback)\n * @param options - an object representing the options to be set for this notifier, this should have\n * any defaults already set by the caller\n */\nfunction Notifier(queue, options) {\n this.queue = queue;\n this.options = options;\n this.transforms = [];\n}\n\n/*\n * configure - updates the options for this notifier with the passed in object\n *\n * @param options - an object which gets merged with the current options set on this notifier\n * @returns this\n */\nNotifier.prototype.configure = function(options) {\n this.queue && this.queue.configure(options);\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n return this;\n};\n\n/*\n * addTransform - adds a transform onto the end of the queue of transforms for this notifier\n *\n * @param transform - a function which takes three arguments:\n * * item: An Object representing the data to eventually be sent to Rollbar\n * * options: The current value of the options for this notifier\n * * callback: function(err: (Null|Error), item: (Null|Object)) the transform must call this\n * callback with a null value for error if it wants the processing chain to continue, otherwise\n * with an error to terminate the processing. The item should be the updated item after this\n * transform is finished modifying it.\n */\nNotifier.prototype.addTransform = function(transform) {\n if (_.isFunction(transform)) {\n this.transforms.push(transform);\n }\n return this;\n};\n\n/*\n * log - the internal log function which applies the configured transforms and then pushes onto the\n * queue to be sent to the backend.\n *\n * @param item - An object with the following structure:\n * message [String] - An optional string to be sent to rollbar\n * error [Error] - An optional error\n *\n * @param callback - A function of type function(err, resp) which will be called with exactly one\n * null argument and one non-null argument. The callback will be called once, either during the\n * transform stage if an error occurs inside a transform, or in response to the communication with\n * the backend. The second argument will be the response from the backend in case of success.\n */\nNotifier.prototype.log = function(item, callback) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!this.options.enabled) {\n return callback(new Error('Rollbar is not enabled'));\n }\n\n this.queue.addPendingItem(item);\n var originalError = item.err;\n this._applyTransforms(item, function(err, i) {\n if (err) {\n this.queue.removePendingItem(item);\n return callback(err, null);\n }\n this.queue.addItem(i, callback, originalError, item);\n }.bind(this));\n};\n\n/* Internal */\n\n/*\n * _applyTransforms - Applies the transforms that have been added to this notifier sequentially. See\n * `addTransform` for more information.\n *\n * @param item - An item to be transformed\n * @param callback - A function of type function(err, item) which will be called with a non-null\n * error and a null item in the case of a transform failure, or a null error and non-null item after\n * all transforms have been applied.\n */\nNotifier.prototype._applyTransforms = function(item, callback) {\n var transformIndex = -1;\n var transformsLength = this.transforms.length;\n var transforms = this.transforms;\n var options = this.options;\n\n var cb = function(err, i) {\n if (err) {\n callback(err, null);\n return;\n }\n\n transformIndex++;\n\n if (transformIndex === transformsLength) {\n callback(null, i);\n return;\n }\n\n transforms[transformIndex](i, options, cb);\n };\n\n cb(null, item);\n};\n\nmodule.exports = Notifier;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/notifier.js\n// module id = 9\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nvar MAX_EVENTS = 100;\n\nfunction Telemeter(options) {\n this.queue = [];\n this.options = _.merge(options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n this.maxQueueSize = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n}\n\nTelemeter.prototype.configure = function(options) {\n var oldOptions = this.options;\n this.options = _.merge(oldOptions, options);\n var maxTelemetryEvents = this.options.maxTelemetryEvents || MAX_EVENTS;\n var newMaxEvents = Math.max(0, Math.min(maxTelemetryEvents, MAX_EVENTS));\n var deleteCount = 0;\n if (this.maxQueueSize > newMaxEvents) {\n deleteCount = this.maxQueueSize - newMaxEvents;\n }\n this.maxQueueSize = newMaxEvents;\n this.queue.splice(0, deleteCount);\n};\n\nTelemeter.prototype.copyEvents = function() {\n var events = Array.prototype.slice.call(this.queue, 0);\n if (_.isFunction(this.options.filterTelemetry)) {\n try {\n var i = events.length;\n while (i--) {\n if (this.options.filterTelemetry(events[i])) {\n events.splice(i, 1);\n }\n }\n } catch (e) {\n this.options.filterTelemetry = null;\n }\n }\n return events;\n};\n\nTelemeter.prototype.capture = function(type, metadata, level, rollbarUUID, timestamp) {\n var e = {\n level: getLevel(type, level),\n type: type,\n timestamp_ms: timestamp || _.now(),\n body: metadata,\n source: 'client'\n };\n if (rollbarUUID) {\n e.uuid = rollbarUUID;\n }\n\n try {\n if (_.isFunction(this.options.filterTelemetry) && this.options.filterTelemetry(e)) {\n return false;\n }\n } catch (exc) {\n this.options.filterTelemetry = null;\n }\n\n this.push(e);\n return e;\n};\n\nTelemeter.prototype.captureEvent = function(type, metadata, level, rollbarUUID) {\n return this.capture(type, metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.captureError = function(err, level, rollbarUUID, timestamp) {\n var metadata = {\n message: err.message || String(err)\n };\n if (err.stack) {\n metadata.stack = err.stack;\n }\n return this.capture('error', metadata, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureLog = function(message, level, rollbarUUID, timestamp) {\n return this.capture('log', {\n message: message\n }, level, rollbarUUID, timestamp);\n};\n\nTelemeter.prototype.captureNetwork = function(metadata, subtype, rollbarUUID, requestData) {\n subtype = subtype || 'xhr';\n metadata.subtype = metadata.subtype || subtype;\n if (requestData) {\n metadata.request = requestData;\n }\n var level = this.levelFromStatus(metadata.status_code);\n return this.capture('network', metadata, level, rollbarUUID);\n};\n\nTelemeter.prototype.levelFromStatus = function(statusCode) {\n if (statusCode >= 200 && statusCode < 400) {\n return 'info';\n }\n if (statusCode === 0 || statusCode >= 400) {\n return 'error';\n }\n return 'info';\n};\n\nTelemeter.prototype.captureDom = function(subtype, element, value, checked, rollbarUUID) {\n var metadata = {\n subtype: subtype,\n element: element\n };\n if (value !== undefined) {\n metadata.value = value;\n }\n if (checked !== undefined) {\n metadata.checked = checked;\n }\n return this.capture('dom', metadata, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureNavigation = function(from, to, rollbarUUID) {\n return this.capture('navigation', {from: from, to: to}, 'info', rollbarUUID);\n};\n\nTelemeter.prototype.captureDomContentLoaded = function(ts) {\n return this.capture('navigation', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'DOMContentLoaded'}, 'info', undefined, ts && ts.getTime());\n */\n};\nTelemeter.prototype.captureLoad = function(ts) {\n return this.capture('navigation', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n /**\n * If we decide to make this a dom event instead, then use the line below:\n return this.capture('dom', {subtype: 'load'}, 'info', undefined, ts && ts.getTime());\n */\n};\n\nTelemeter.prototype.captureConnectivityChange = function(type, rollbarUUID) {\n return this.captureNetwork({change: type}, 'connectivity', rollbarUUID);\n};\n\n// Only intended to be used internally by the notifier\nTelemeter.prototype._captureRollbarItem = function(item) {\n if (!this.options.includeItemsInTelemetry) {\n return;\n }\n if (item.err) {\n return this.captureError(item.err, item.level, item.uuid, item.timestamp);\n }\n if (item.message) {\n return this.captureLog(item.message, item.level, item.uuid, item.timestamp);\n }\n if (item.custom) {\n return this.capture('log', item.custom, item.level, item.uuid, item.timestamp);\n }\n};\n\nTelemeter.prototype.push = function(e) {\n this.queue.push(e);\n if (this.queue.length > this.maxQueueSize) {\n this.queue.shift();\n }\n};\n\nfunction getLevel(type, level) {\n if (level) {\n return level;\n }\n var defaultLevel = {\n error: 'error',\n manual: 'info'\n };\n return defaultLevel[type] || 'info';\n}\n\nmodule.exports = Telemeter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/telemetry.js\n// module id = 10\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\nvar helpers = require('./apiUtility');\nvar truncation = require('./truncation');\n\nvar defaultOptions = {\n hostname: 'api.rollbar.com',\n path: '/api/1/item/',\n search: null,\n version: '1',\n protocol: 'https:',\n port: 443\n};\n\n/**\n * Api is an object that encapsulates methods of communicating with\n * the Rollbar API. It is a standard interface with some parts implemented\n * differently for server or browser contexts. It is an object that should\n * be instantiated when used so it can contain non-global options that may\n * be different for another instance of RollbarApi.\n *\n * @param options {\n * accessToken: the accessToken to use for posting items to rollbar\n * endpoint: an alternative endpoint to send errors to\n * must be a valid, fully qualified URL.\n * The default is: https://api.rollbar.com/api/1/item\n * proxy: if you wish to proxy requests provide an object\n * with the following keys:\n * host or hostname (required): foo.example.com\n * port (optional): 123\n * protocol (optional): https\n * }\n */\nfunction Api(options, t, u, j) {\n this.options = options;\n this.transport = t;\n this.url = u;\n this.jsonBackup = j;\n this.accessToken = options.accessToken;\n this.transportOptions = _getTransport(options, u);\n}\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.postItem = function(data, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n this.transport.post(this.accessToken, transportOptions, payload, callback);\n};\n\n/**\n *\n * @param data\n * @param callback\n */\nApi.prototype.buildJsonPayload = function(data, callback) {\n var payload = helpers.buildPayload(this.accessToken, data, this.jsonBackup);\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n if (callback) {\n callback(stringifyResult.error);\n }\n return null;\n }\n\n return stringifyResult.value;\n};\n\n/**\n *\n * @param jsonPayload\n * @param callback\n */\nApi.prototype.postJsonPayload = function(jsonPayload, callback) {\n var transportOptions = helpers.transportOptions(this.transportOptions, 'POST');\n this.transport.postJsonPayload(this.accessToken, transportOptions, jsonPayload, callback);\n};\n\nApi.prototype.configure = function(options) {\n var oldOptions = this.oldOptions;\n this.options = _.merge(oldOptions, options);\n this.transportOptions = _getTransport(this.options, this.url);\n if (this.options.accessToken !== undefined) {\n this.accessToken = this.options.accessToken;\n }\n return this;\n};\n\nfunction _getTransport(options, url) {\n return helpers.getTransportFromOptions(options, defaultOptions, url);\n}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/api.js\n// module id = 11\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction buildPayload(accessToken, data, jsonBackup) {\n if (!_.isType(data.context, 'string')) {\n var contextResult = _.stringify(data.context, jsonBackup);\n if (contextResult.error) {\n data.context = 'Error: could not serialize \\'context\\'';\n } else {\n data.context = contextResult.value || '';\n }\n if (data.context.length > 255) {\n data.context = data.context.substr(0, 255);\n }\n }\n return {\n access_token: accessToken,\n data: data\n };\n}\n\nfunction getTransportFromOptions(options, defaults, url) {\n var hostname = defaults.hostname;\n var protocol = defaults.protocol;\n var port = defaults.port;\n var path = defaults.path;\n var search = defaults.search;\n\n var proxy = options.proxy;\n if (options.endpoint) {\n var opts = url.parse(options.endpoint);\n hostname = opts.hostname;\n protocol = opts.protocol;\n port = opts.port;\n path = opts.pathname;\n search = opts.search;\n }\n return {\n hostname: hostname,\n protocol: protocol,\n port: port,\n path: path,\n search: search,\n proxy: proxy\n };\n}\n\nfunction transportOptions(transport, method) {\n var protocol = transport.protocol || 'https:';\n var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);\n var hostname = transport.hostname;\n var path = transport.path;\n if (transport.search) {\n path = path + transport.search;\n }\n if (transport.proxy) {\n path = protocol + '//' + hostname + path;\n hostname = transport.proxy.host || transport.proxy.hostname;\n port = transport.proxy.port;\n protocol = transport.proxy.protocol || protocol;\n }\n return {\n protocol: protocol,\n hostname: hostname,\n path: path,\n port: port,\n method: method\n };\n}\n\nfunction appendPathToPath(base, path) {\n var baseTrailingSlash = /\\/$/.test(base);\n var pathBeginningSlash = /^\\//.test(path);\n\n if (baseTrailingSlash && pathBeginningSlash) {\n path = path.substring(1);\n } else if (!baseTrailingSlash && !pathBeginningSlash) {\n path = '/' + path;\n }\n\n return base + path;\n}\n\nmodule.exports = {\n buildPayload: buildPayload,\n getTransportFromOptions: getTransportFromOptions,\n transportOptions: transportOptions,\n appendPathToPath: appendPathToPath\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/apiUtility.js\n// module id = 12\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction raw(payload, jsonBackup) {\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction selectFrames(frames, range) {\n var len = frames.length;\n if (len > range * 2) {\n return frames.slice(0, range).concat(frames.slice(len - range));\n }\n return frames;\n}\n\nfunction truncateFrames(payload, jsonBackup, range) {\n range = (typeof range === 'undefined') ? 30 : range;\n var body = payload.data.body;\n var frames;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n frames = chain[i].frames;\n frames = selectFrames(frames, range);\n chain[i].frames = frames;\n }\n } else if (body.trace) {\n frames = body.trace.frames;\n frames = selectFrames(frames, range);\n body.trace.frames = frames;\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction maybeTruncateValue(len, val) {\n if (!val) {\n return val;\n }\n if (val.length > len) {\n return val.slice(0, len - 3).concat('...');\n }\n return val;\n}\n\nfunction truncateStrings(len, payload, jsonBackup) {\n function truncator(k, v, seen) {\n switch (_.typeName(v)) {\n case 'string':\n return maybeTruncateValue(len, v);\n case 'object':\n case 'array':\n return _.traverse(v, truncator, seen);\n default:\n return v;\n }\n }\n payload = _.traverse(payload, truncator, []);\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction truncateTraceData(traceData) {\n if (traceData.exception) {\n delete traceData.exception.description;\n traceData.exception.message = maybeTruncateValue(255, traceData.exception.message);\n }\n traceData.frames = selectFrames(traceData.frames, 1);\n return traceData;\n}\n\nfunction minBody(payload, jsonBackup) {\n var body = payload.data.body;\n if (body.trace_chain) {\n var chain = body.trace_chain;\n for (var i = 0; i < chain.length; i++) {\n chain[i] = truncateTraceData(chain[i]);\n }\n } else if (body.trace) {\n body.trace = truncateTraceData(body.trace);\n }\n return [payload, _.stringify(payload, jsonBackup)];\n}\n\nfunction needsTruncation(payload, maxSize) {\n return payload.length > maxSize;\n}\n\nfunction truncate(payload, jsonBackup, maxSize) {\n maxSize = (typeof maxSize === 'undefined') ? (512 * 1024) : maxSize;\n var strategies = [\n raw,\n truncateFrames,\n truncateStrings.bind(null, 1024),\n truncateStrings.bind(null, 512),\n truncateStrings.bind(null, 256),\n minBody\n ];\n var strategy, results, result;\n\n while ((strategy = strategies.shift())) {\n results = strategy(payload, jsonBackup);\n payload = results[0];\n result = results[1];\n if (result.error || !needsTruncation(result.value, maxSize)) {\n return result;\n }\n }\n return result;\n}\n\nmodule.exports = {\n truncate: truncate,\n\n /* for testing */\n raw: raw,\n truncateFrames: truncateFrames,\n truncateStrings: truncateStrings,\n maybeTruncateValue: maybeTruncateValue\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/truncation.js\n// module id = 13\n// module chunks = 0","'use strict';\n\n/* eslint-disable no-console */\nrequire('console-polyfill');\nvar detection = require('./detection');\nvar _ = require('../utility');\n\nfunction error() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.error(_.formatArgsAsString(args));\n } else {\n console.error.apply(console, args);\n }\n}\n\nfunction info() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.info(_.formatArgsAsString(args));\n } else {\n console.info.apply(console, args);\n }\n}\n\nfunction log() {\n var args = Array.prototype.slice.call(arguments, 0);\n args.unshift('Rollbar:');\n if (detection.ieVersion() <= 8) {\n console.log(_.formatArgsAsString(args));\n } else {\n console.log.apply(console, args);\n }\n}\n\n/* eslint-enable no-console */\n\nmodule.exports = {\n error: error,\n info: info,\n log: log\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/logger.js\n// module id = 14\n// module chunks = 0","// Console-polyfill. MIT license.\n// https://github.com/paulmillr/console-polyfill\n// Make it safe to do console.log() always.\n(function(global) {\n 'use strict';\n if (!global.console) {\n global.console = {};\n }\n var con = global.console;\n var prop, method;\n var dummy = function() {};\n var properties = ['memory'];\n var methods = ('assert,clear,count,debug,dir,dirxml,error,exception,group,' +\n 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' +\n 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',');\n while (prop = properties.pop()) if (!con[prop]) con[prop] = {};\n while (method = methods.pop()) if (!con[method]) con[method] = dummy;\n // Using `this` for web workers & supports Browserify / Webpack.\n})(typeof window === 'undefined' ? this : window);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-polyfill/index.js\n// module id = 15\n// module chunks = 0","'use strict';\n\n// This detection.js module is used to encapsulate any ugly browser/feature\n// detection we may need to do.\n\n// Figure out which version of IE we're using, if any.\n// This is gleaned from http://stackoverflow.com/questions/5574842/best-way-to-check-for-ie-less-than-9-in-javascript-without-library\n// Will return an integer on IE (i.e. 8)\n// Will return undefined otherwise\nfunction getIEVersion() {\n\tvar undef;\n\tif (!document) {\n\t\treturn undef;\n\t}\n\n var v = 3,\n div = document.createElement('div'),\n all = div.getElementsByTagName('i');\n\n while (\n div.innerHTML = '',\n all[0]\n );\n\n return v > 4 ? v : undef;\n}\n\nvar Detection = {\n ieVersion: getIEVersion\n};\n\nmodule.exports = Detection;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/detection.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nfunction captureUncaughtExceptions(window, handler, shim) {\n if (!window) { return; }\n var oldOnError;\n\n if (typeof handler._rollbarOldOnError === 'function') {\n oldOnError = handler._rollbarOldOnError;\n } else if (window.onerror) {\n oldOnError = window.onerror;\n while (oldOnError._rollbarOldOnError) {\n oldOnError = oldOnError._rollbarOldOnError;\n }\n handler._rollbarOldOnError = oldOnError;\n }\n\n var fn = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n _rollbarWindowOnError(window, handler, oldOnError, args);\n };\n if (shim) {\n fn._rollbarOldOnError = oldOnError;\n }\n window.onerror = fn;\n}\n\nfunction _rollbarWindowOnError(window, r, old, args) {\n if (window._rollbarWrappedError) {\n if (!args[4]) {\n args[4] = window._rollbarWrappedError;\n }\n if (!args[5]) {\n args[5] = window._rollbarWrappedError._rollbarContext;\n }\n window._rollbarWrappedError = null;\n }\n\n r.handleUncaughtException.apply(r, args);\n if (old) {\n old.apply(window, args);\n }\n}\n\nfunction captureUnhandledRejections(window, handler, shim) {\n if (!window) { return; }\n\n if (typeof window._rollbarURH === 'function' && window._rollbarURH.belongsToShim) {\n window.removeEventListener('unhandledrejection', window._rollbarURH);\n }\n\n var rejectionHandler = function (evt) {\n var reason, promise, detail;\n try {\n reason = evt.reason;\n } catch (e) {\n reason = undefined;\n }\n try {\n promise = evt.promise;\n } catch (e) {\n promise = '[unhandledrejection] error getting `promise` from event';\n }\n try {\n detail = evt.detail;\n if (!reason && detail) {\n reason = detail.reason;\n promise = detail.promise;\n }\n } catch (e) {\n // Ignore\n }\n if (!reason) {\n reason = '[unhandledrejection] error getting `reason` from event';\n }\n\n if (handler && handler.handleUnhandledRejection) {\n handler.handleUnhandledRejection(reason, promise);\n }\n };\n rejectionHandler.belongsToShim = shim;\n window._rollbarURH = rejectionHandler;\n window.addEventListener('unhandledrejection', rejectionHandler);\n}\n\nfunction wrapGlobals(window, handler, shim) {\n if (!window) { return; }\n // Adapted from https://github.com/bugsnag/bugsnag-js\n var globals = 'EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload'.split(',');\n var i, global;\n for (i = 0; i < globals.length; ++i) {\n global = globals[i];\n\n if (window[global] && window[global].prototype) {\n _extendListenerPrototype(handler, window[global].prototype, shim);\n }\n }\n}\n\nfunction _extendListenerPrototype(handler, prototype, shim) {\n if (prototype.hasOwnProperty && prototype.hasOwnProperty('addEventListener')) {\n var oldAddEventListener = prototype.addEventListener;\n while (oldAddEventListener._rollbarOldAdd && oldAddEventListener.belongsToShim) {\n oldAddEventListener = oldAddEventListener._rollbarOldAdd;\n }\n var addFn = function(event, callback, bubble) {\n oldAddEventListener.call(this, event, handler.wrap(callback), bubble);\n };\n addFn._rollbarOldAdd = oldAddEventListener;\n addFn.belongsToShim = shim;\n prototype.addEventListener = addFn;\n\n var oldRemoveEventListener = prototype.removeEventListener;\n while (oldRemoveEventListener._rollbarOldRemove && oldRemoveEventListener.belongsToShim) {\n oldRemoveEventListener = oldRemoveEventListener._rollbarOldRemove;\n }\n var removeFn = function(event, callback, bubble) {\n oldRemoveEventListener.call(this, event, callback && callback._rollbar_wrapped || callback, bubble);\n };\n removeFn._rollbarOldRemove = oldRemoveEventListener;\n removeFn.belongsToShim = shim;\n prototype.removeEventListener = removeFn;\n }\n}\n\nmodule.exports = {\n captureUncaughtExceptions: captureUncaughtExceptions,\n captureUnhandledRejections: captureUnhandledRejections,\n wrapGlobals: wrapGlobals\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/globalSetup.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/*global XDomainRequest*/\n\nvar _ = require('../utility');\nvar truncation = require('../truncation');\nvar logger = require('./logger');\n\n/*\n * accessToken may be embedded in payload but that should not\n * be assumed\n *\n * options: {\n * hostname\n * protocol\n * path\n * port\n * method\n * }\n *\n * params is an object containing key/value pairs. These\n * will be appended to the path as 'key=value&key=value'\n *\n * payload is an unserialized object\n */\n\nfunction get(accessToken, options, params, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n _.addParamsAndAccessTokenToPath(accessToken, options, params);\n\n var method = 'GET';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, null, callback, requestFactory);\n}\n\nfunction post(accessToken, options, payload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n if (!payload) {\n return callback(new Error('Cannot send empty request'));\n }\n\n var stringifyResult = truncation.truncate(payload);\n if (stringifyResult.error) {\n return callback(stringifyResult.error);\n }\n\n var writeData = stringifyResult.value;\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory);\n}\n\nfunction postJsonPayload(accessToken, options, jsonPayload, callback, requestFactory) {\n if (!callback || !_.isFunction(callback)) {\n callback = function() {};\n }\n\n var method = 'POST';\n var url = _.formatUrl(options);\n _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory);\n}\n\n// Wraps _makeRequest and if Angular 2+ Zone.js is detected, changes scope\n// so Angular change detection isn't triggered on each API call.\n// This is the equivalent of runOutsideAngular().\n//\nfunction _makeZoneRequest(accessToken, url, method, data, callback, requestFactory) {\n var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);\n var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;\n\n if (currentZone && currentZone._name === 'angular') {\n var rootZone = currentZone._parent;\n rootZone.run(function () {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n });\n } else {\n _makeRequest(accessToken, url, method, data, callback, requestFactory);\n }\n}\n\n/* global RollbarProxy */\nfunction _proxyRequest(json, callback) {\n var rollbarProxy = new RollbarProxy();\n rollbarProxy.sendJsonPayload(\n json,\n function(_msg) { /* do nothing */ }, // eslint-disable-line no-unused-vars\n function(err) {\n callback(new Error(err));\n }\n );\n}\n\nfunction _makeRequest(accessToken, url, method, data, callback, requestFactory) {\n if (typeof RollbarProxy !== 'undefined') {\n return _proxyRequest(data, callback);\n }\n\n var request;\n if (requestFactory) {\n request = requestFactory();\n } else {\n request = _createXMLHTTPObject();\n }\n if (!request) {\n // Give up, no way to send requests\n return callback(new Error('No way to send a request'));\n }\n try {\n try {\n var onreadystatechange = function() {\n try {\n if (onreadystatechange && request.readyState === 4) {\n onreadystatechange = undefined;\n\n var parseResponse = _.jsonParse(request.responseText);\n if (_isSuccess(request)) {\n callback(parseResponse.error, parseResponse.value);\n return;\n } else if (_isNormalFailure(request)) {\n if (request.status === 403) {\n // likely caused by using a server access token\n var message = parseResponse.value && parseResponse.value.message;\n logger.error(message);\n }\n // return valid http status codes\n callback(new Error(String(request.status)));\n } else {\n // IE will return a status 12000+ on some sort of connection failure,\n // so we return a blank error\n // http://msdn.microsoft.com/en-us/library/aa383770%28VS.85%29.aspx\n var msg = 'XHR response had no status code (likely connection failure)';\n callback(_newRetriableError(msg));\n }\n }\n } catch (ex) {\n //jquery source mentions firefox may error out while accessing the\n //request members if there is a network error\n //https://github.com/jquery/jquery/blob/a938d7b1282fc0e5c52502c225ae8f0cef219f0a/src/ajax/xhr.js#L111\n var exc;\n if (ex && ex.stack) {\n exc = ex;\n } else {\n exc = new Error(ex);\n }\n callback(exc);\n }\n };\n\n request.open(method, url, true);\n if (request.setRequestHeader) {\n request.setRequestHeader('Content-Type', 'application/json');\n request.setRequestHeader('X-Rollbar-Access-Token', accessToken);\n }\n request.onreadystatechange = onreadystatechange;\n request.send(data);\n } catch (e1) {\n // Sending using the normal xmlhttprequest object didn't work, try XDomainRequest\n if (typeof XDomainRequest !== 'undefined') {\n\n // Assume we are in a really old browser which has a bunch of limitations:\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n\n // Extreme paranoia: if we have XDomainRequest then we have a window, but just in case\n if (!window || !window.location) {\n return callback(new Error('No window available during request, unknown environment'));\n }\n\n // If the current page is http, try and send over http\n if (window.location.href.substring(0, 5) === 'http:' && url.substring(0, 5) === 'https') {\n url = 'http' + url.substring(5);\n }\n\n var xdomainrequest = new XDomainRequest();\n xdomainrequest.onprogress = function() {};\n xdomainrequest.ontimeout = function() {\n var msg = 'Request timed out';\n var code = 'ETIMEDOUT';\n callback(_newRetriableError(msg, code));\n };\n xdomainrequest.onerror = function() {\n callback(new Error('Error during request'));\n };\n xdomainrequest.onload = function() {\n var parseResponse = _.jsonParse(xdomainrequest.responseText);\n callback(parseResponse.error, parseResponse.value);\n };\n xdomainrequest.open(method, url, true);\n xdomainrequest.send(data);\n } else {\n callback(new Error('Cannot find a method to transport a request'));\n }\n }\n } catch (e2) {\n callback(e2);\n }\n}\n\nfunction _createXMLHTTPObject() {\n /* global ActiveXObject:false */\n\n var factories = [\n function () {\n return new XMLHttpRequest();\n },\n function () {\n return new ActiveXObject('Msxml2.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Msxml3.XMLHTTP');\n },\n function () {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n var xmlhttp;\n var i;\n var numFactories = factories.length;\n for (i = 0; i < numFactories; i++) {\n /* eslint-disable no-empty */\n try {\n xmlhttp = factories[i]();\n break;\n } catch (e) {\n // pass\n }\n /* eslint-enable no-empty */\n }\n return xmlhttp;\n}\n\nfunction _isSuccess(r) {\n return r && r.status && r.status === 200;\n}\n\nfunction _isNormalFailure(r) {\n return r && _.isType(r.status, 'number') && r.status >= 400 && r.status < 600;\n}\n\nfunction _newRetriableError(message, code) {\n var err = new Error(message);\n err.code = code || 'ENOTFOUND';\n return err;\n}\n\nmodule.exports = {\n get: get,\n post: post,\n postJsonPayload: postJsonPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transport.js\n// module id = 18\n// module chunks = 0","'use strict';\n\n// See https://nodejs.org/docs/latest/api/url.html\nfunction parse(url) {\n var result = {\n protocol: null, auth: null, host: null, path: null,\n hash: null, href: url, hostname: null, port: null,\n pathname: null, search: null, query: null\n };\n\n var i, last;\n i = url.indexOf('//');\n if (i !== -1) {\n result.protocol = url.substring(0,i);\n last = i+2;\n } else {\n last = 0;\n }\n \n i = url.indexOf('@', last);\n if (i !== -1) {\n result.auth = url.substring(last, i);\n last = i+1;\n }\n\n i = url.indexOf('/', last);\n if (i === -1) {\n i = url.indexOf('?', last);\n if (i === -1) {\n i = url.indexOf('#', last);\n if (i === -1) {\n result.host = url.substring(last);\n } else {\n result.host = url.substring(last, i);\n result.hash = url.substring(i);\n }\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n return result;\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n } else {\n result.host = url.substring(last, i);\n result.hostname = result.host.split(':')[0];\n result.port = result.host.split(':')[1];\n if (result.port) {\n result.port = parseInt(result.port, 10);\n }\n last = i;\n }\n\n i = url.indexOf('#', last);\n if (i === -1) {\n result.path = url.substring(last);\n } else {\n result.path = url.substring(last, i);\n result.hash = url.substring(i);\n }\n\n if (result.path) {\n var pathParts = result.path.split('?');\n result.pathname = pathParts[0];\n result.query = pathParts[1];\n result.search = result.query ? '?' + result.query : null;\n }\n return result;\n}\n\nmodule.exports = {\n parse: parse\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/url.js\n// module id = 19\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar errorParser = require('./errorParser');\nvar logger = require('./logger');\n\nfunction handleItemWithError(item, options, callback) {\n item.data = item.data || {};\n if (item.err) {\n try {\n item.stackInfo = item.err._savedStackTrace || errorParser.parse(item.err);\n } catch (e) {\n logger.error('Error while parsing the error object.', e);\n try {\n item.message = item.err.message || item.err.description || item.message || String(item.err);\n } catch (e2) {\n item.message = String(item.err) || String(e2);\n }\n delete item.err;\n }\n }\n callback(null, item);\n}\n\nfunction ensureItemHasSomethingToSay(item, options, callback) {\n if (!item.message && !item.stackInfo && !item.custom) {\n callback(new Error('No message, stack info, or custom data'), null);\n }\n callback(null, item);\n}\n\nfunction addBaseInfo(item, options, callback) {\n var environment = (options.payload && options.payload.environment) || options.environment;\n item.data = _.merge(item.data, {\n environment: environment,\n level: item.level,\n endpoint: options.endpoint,\n platform: 'browser',\n framework: 'browser-js',\n language: 'javascript',\n server: {},\n uuid: item.uuid,\n notifier: {\n name: 'rollbar-browser-js',\n version: options.version\n }\n });\n callback(null, item);\n}\n\nfunction addRequestInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.location) {\n return callback(null, item);\n }\n var remoteString = '$remote_ip';\n if (!options.captureIp) {\n remoteString = null;\n } else if (options.captureIp !== true) {\n remoteString += '_anonymize';\n }\n _.set(item, 'data.request', {\n url: window.location.href,\n query_string: window.location.search,\n user_ip: remoteString\n });\n callback(null, item);\n };\n}\n\nfunction addClientInfo(window) {\n return function(item, options, callback) {\n if (!window) {\n return callback(null, item);\n }\n var nav = window.navigator || {};\n var scr = window.screen || {};\n _.set(item, 'data.client', {\n runtime_ms: item.timestamp - window._rollbarStartTime,\n timestamp: Math.round(item.timestamp / 1000),\n javascript: {\n browser: nav.userAgent,\n language: nav.language,\n cookie_enabled: nav.cookieEnabled,\n screen: {\n width: scr.width,\n height: scr.height\n }\n }\n });\n callback(null, item);\n };\n}\n\nfunction addPluginInfo(window) {\n return function(item, options, callback) {\n if (!window || !window.navigator) {\n return callback(null, item);\n }\n var plugins = [];\n var navPlugins = window.navigator.plugins || [];\n var cur;\n for (var i=0, l=navPlugins.length; i < l; ++i) {\n cur = navPlugins[i];\n plugins.push({name: cur.name, description: cur.description});\n }\n _.set(item, 'data.client.javascript.plugins', plugins);\n callback(null, item);\n };\n}\n\nfunction addBody(item, options, callback) {\n if (item.stackInfo) {\n addBodyTrace(item, options, callback);\n } else {\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction addBodyMessage(item, options, callback) {\n var message = item.message;\n var custom = item.custom;\n\n if (!message) {\n if (custom) {\n var scrubFields = options.scrubFields;\n var messageResult = _.stringify(_.scrub(custom, scrubFields));\n message = messageResult.error || messageResult.value || '';\n } else {\n message = '';\n }\n }\n var result = {\n body: message\n };\n\n if (custom) {\n result.extra = _.merge(custom);\n }\n\n _.set(item, 'data.body', {message: result});\n callback(null, item);\n}\n\n\nfunction addBodyTrace(item, options, callback) {\n var description = item.data.description;\n var stackInfo = item.stackInfo;\n var custom = item.custom;\n\n var guess = errorParser.guessErrorClass(stackInfo.message);\n var className = stackInfo.name || guess[0];\n var message = guess[1];\n var trace = {\n exception: {\n 'class': className,\n message: message\n }\n };\n\n if (description) {\n trace.exception.description = description;\n }\n\n // Transform a TraceKit stackInfo object into a Rollbar trace\n var stack = stackInfo.stack;\n if (stack && stack.length === 0 && item._unhandledStackInfo && item._unhandledStackInfo.stack) {\n stack = item._unhandledStackInfo.stack;\n }\n if (stack) {\n if (stack.length === 0) {\n trace.exception.stack = stackInfo.rawStack;\n trace.exception.raw = String(stackInfo.rawException);\n }\n var stackFrame;\n var frame;\n var code;\n var pre;\n var post;\n var contextLength;\n var i, mid;\n\n trace.frames = [];\n for (i = 0; i < stack.length; ++i) {\n stackFrame = stack[i];\n frame = {\n filename: stackFrame.url ? _.sanitizeUrl(stackFrame.url) : '(unknown)',\n lineno: stackFrame.line || null,\n method: (!stackFrame.func || stackFrame.func === '?') ? '[anonymous]' : stackFrame.func,\n colno: stackFrame.column\n };\n if (options.sendFrameUrl) {\n frame.url = stackFrame.url;\n }\n if (frame.method && frame.method.endsWith && frame.method.endsWith('_rollbar_wrapped')) {\n continue;\n }\n\n code = pre = post = null;\n contextLength = stackFrame.context ? stackFrame.context.length : 0;\n if (contextLength) {\n mid = Math.floor(contextLength / 2);\n pre = stackFrame.context.slice(0, mid);\n code = stackFrame.context[mid];\n post = stackFrame.context.slice(mid);\n }\n\n if (code) {\n frame.code = code;\n }\n\n if (pre || post) {\n frame.context = {};\n if (pre && pre.length) {\n frame.context.pre = pre;\n }\n if (post && post.length) {\n frame.context.post = post;\n }\n }\n\n if (stackFrame.args) {\n frame.args = stackFrame.args;\n }\n\n trace.frames.push(frame);\n }\n\n // NOTE(cory): reverse the frames since rollbar.com expects the most recent call last\n trace.frames.reverse();\n\n if (custom) {\n trace.extra = _.merge(custom);\n }\n _.set(item, 'data.body', {trace: trace});\n callback(null, item);\n } else {\n item.message = className + ': ' + message;\n addBodyMessage(item, options, callback);\n }\n}\n\nfunction scrubPayload(item, options, callback) {\n var scrubFields = options.scrubFields;\n item.data = _.scrub(item.data, scrubFields);\n callback(null, item);\n}\n\nmodule.exports = {\n handleItemWithError: handleItemWithError,\n ensureItemHasSomethingToSay: ensureItemHasSomethingToSay,\n addBaseInfo: addBaseInfo,\n addRequestInfo: addRequestInfo,\n addClientInfo: addClientInfo,\n addPluginInfo: addPluginInfo,\n addBody: addBody,\n scrubPayload: scrubPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/transforms.js\n// module id = 20\n// module chunks = 0","'use strict';\n\nvar ErrorStackParser = require('error-stack-parser');\n\nvar UNKNOWN_FUNCTION = '?';\nvar ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');\n\nfunction guessFunctionName() {\n return UNKNOWN_FUNCTION;\n}\n\n\nfunction gatherContext() {\n return null;\n}\n\n\nfunction Frame(stackFrame) {\n var data = {};\n\n data._stackFrame = stackFrame;\n\n data.url = stackFrame.fileName;\n data.line = stackFrame.lineNumber;\n data.func = stackFrame.functionName;\n data.column = stackFrame.columnNumber;\n data.args = stackFrame.args;\n\n data.context = gatherContext();\n\n return data;\n}\n\n\nfunction Stack(exception) {\n function getStack() {\n var parserStack = [];\n var exc;\n\n if (!exception.stack) {\n try {\n throw exception;\n } catch (e) {\n exc = e;\n }\n } else {\n exc = exception;\n }\n\n try {\n parserStack = ErrorStackParser.parse(exc);\n } catch(e) {\n parserStack = [];\n }\n\n var stack = [];\n\n for (var i = 0; i < parserStack.length; i++) {\n stack.push(new Frame(parserStack[i]));\n }\n\n return stack;\n }\n\n var name = exception.constructor && exception.constructor.name;\n if (!name || !name.length || name.length < 3) {\n name = exception.name;\n }\n\n return {\n stack: getStack(),\n message: exception.message,\n name: name,\n rawStack: exception.stack,\n rawException: exception\n };\n}\n\n\nfunction parse(e) {\n return new Stack(e);\n}\n\n\nfunction guessErrorClass(errMsg) {\n if (!errMsg || !errMsg.match) {\n return ['Unknown error. There was no error message to display.', ''];\n }\n var errClassMatch = errMsg.match(ERR_CLASS_REGEXP);\n var errClass = '(unknown)';\n\n if (errClassMatch) {\n errClass = errClassMatch[errClassMatch.length - 1];\n errMsg = errMsg.replace((errClassMatch[errClassMatch.length - 2] || '') + errClass + ':', '');\n errMsg = errMsg.replace(/(^[\\s]+|[\\s]+$)/g, '');\n }\n return [errClass, errMsg];\n}\n\n\nmodule.exports = {\n guessFunctionName: guessFunctionName,\n guessErrorClass: guessErrorClass,\n gatherContext: gatherContext,\n parse: parse,\n Stack: Stack,\n Frame: Frame\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/errorParser.js\n// module id = 21\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = locationParts[0] === 'eval' ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/error-stack-parser.js\n// module id = 22\n// module chunks = 0","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function () {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) {\n if (functionName !== undefined) {\n this.setFunctionName(functionName);\n }\n if (args !== undefined) {\n this.setArgs(args);\n }\n if (fileName !== undefined) {\n this.setFileName(fileName);\n }\n if (lineNumber !== undefined) {\n this.setLineNumber(lineNumber);\n }\n if (columnNumber !== undefined) {\n this.setColumnNumber(columnNumber);\n }\n if (source !== undefined) {\n this.setSource(source);\n }\n }\n\n StackFrame.prototype = {\n getFunctionName: function () {\n return this.functionName;\n },\n setFunctionName: function (v) {\n this.functionName = String(v);\n },\n\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n // NOTE: Property name may be misleading as it includes the path,\n // but it somewhat mirrors V8's JavaScriptStackTraceApi\n // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's\n // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14\n getFileName: function () {\n return this.fileName;\n },\n setFileName: function (v) {\n this.fileName = String(v);\n },\n\n getLineNumber: function () {\n return this.lineNumber;\n },\n setLineNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Line Number must be a Number');\n }\n this.lineNumber = Number(v);\n },\n\n getColumnNumber: function () {\n return this.columnNumber;\n },\n setColumnNumber: function (v) {\n if (!_isNumber(v)) {\n throw new TypeError('Column Number must be a Number');\n }\n this.columnNumber = Number(v);\n },\n\n getSource: function () {\n return this.source;\n },\n setSource: function (v) {\n this.source = String(v);\n },\n\n toString: function() {\n var functionName = this.getFunctionName() || '{anonymous}';\n var args = '(' + (this.getArgs() || []).join(',') + ')';\n var fileName = this.getFileName() ? ('@' + this.getFileName()) : '';\n var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : '';\n var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : '';\n return functionName + args + fileName + lineNumber + columnNumber;\n }\n };\n\n return StackFrame;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/error-stack-parser/~/stackframe/stackframe.js\n// module id = 23\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction itemToPayload(item, options, callback) {\n var payloadOptions = options.payload || {};\n if (payloadOptions.body) {\n delete payloadOptions.body;\n }\n\n var data = _.merge(item.data, payloadOptions);\n if (item._isUncaught) {\n data._isUncaught = true;\n }\n if (item._originalArgs) {\n data._originalArgs = item._originalArgs;\n }\n callback(null, data);\n}\n\nfunction addTelemetryData(item, options, callback) {\n if (item.telemetryEvents) {\n _.set(item, 'data.body.telemetry', item.telemetryEvents);\n }\n callback(null, item);\n}\n\nfunction addMessageWithError(item, options, callback) {\n if (!item.message) {\n callback(null, item);\n return;\n }\n var tracePath = 'data.body.trace_chain.0';\n var trace = _.get(item, tracePath);\n if (!trace) {\n tracePath = 'data.body.trace';\n trace = _.get(item, tracePath);\n }\n if (trace) {\n if (!(trace.exception && trace.exception.description)) {\n _.set(item, tracePath+'.exception.description', item.message);\n callback(null, item);\n return;\n }\n var extra = _.get(item, tracePath+'.extra') || {};\n var newExtra = _.merge(extra, {message: item.message});\n _.set(item, tracePath+'.extra', newExtra);\n }\n callback(null, item);\n}\n\nfunction userTransform(logger) {\n return function(item, options, callback) {\n var newItem = _.merge(item);\n try {\n if (_.isFunction(options.transform)) {\n options.transform(newItem.data, item);\n }\n } catch (e) {\n options.transform = null;\n logger.error('Error while calling custom transform() function. Removing custom transform().', e);\n callback(null, item);\n return;\n }\n callback(null, newItem);\n }\n}\n\nfunction addConfigToPayload(item, options, callback) {\n if (!options.sendConfig) {\n return callback(null, item);\n }\n var configKey = '_rollbarConfig';\n var custom = _.get(item, 'data.custom') || {};\n custom[configKey] = options;\n item.data.custom = custom;\n callback(null, item);\n}\n\nmodule.exports = {\n itemToPayload: itemToPayload,\n addTelemetryData: addTelemetryData,\n addMessageWithError: addMessageWithError,\n userTransform: userTransform,\n addConfigToPayload: addConfigToPayload\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/transforms.js\n// module id = 24\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\n\nfunction checkIgnore(item, settings) {\n if (_.get(settings, 'plugins.jquery.ignoreAjaxErrors')) {\n return !_.get(item, 'body.message.extra.isAjax');\n }\n return true;\n}\n\nmodule.exports = {\n checkIgnore: checkIgnore\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/predicates.js\n// module id = 25\n// module chunks = 0","'use strict';\n\nvar _ = require('./utility');\n\nfunction checkLevel(item, settings) {\n var level = item.level;\n var levelVal = _.LEVELS[level] || 0;\n var reportLevel = settings.reportLevel;\n var reportLevelVal = _.LEVELS[reportLevel] || 0;\n\n if (levelVal < reportLevelVal) {\n return false;\n }\n return true;\n}\n\nfunction userCheckIgnore(logger) {\n return function(item, settings) {\n var isUncaught = !!item._isUncaught;\n delete item._isUncaught;\n var args = item._originalArgs;\n delete item._originalArgs;\n try {\n if (_.isFunction(settings.onSendCallback)) {\n settings.onSendCallback(isUncaught, args, item);\n }\n } catch (e) {\n settings.onSendCallback = null;\n logger.error('Error while calling onSendCallback, removing', e);\n }\n try {\n if (_.isFunction(settings.checkIgnore) && settings.checkIgnore(isUncaught, args, item)) {\n return false;\n }\n } catch (e) {\n settings.checkIgnore = null;\n logger.error('Error while calling custom checkIgnore(), removing', e);\n }\n return true;\n }\n}\n\nfunction urlIsNotBlacklisted(logger) {\n return function(item, settings) {\n return !urlIsOnAList(item, settings, 'blacklist', logger);\n }\n}\n\nfunction urlIsWhitelisted(logger) {\n return function(item, settings) {\n return urlIsOnAList(item, settings, 'whitelist', logger);\n }\n}\n\nfunction urlIsOnAList(item, settings, whiteOrBlack, logger) {\n // whitelist is the default\n var black = false;\n if (whiteOrBlack === 'blacklist') {\n black = true;\n }\n var list, trace, frame, filename, frameLength, url, listLength, urlRegex;\n var i, j;\n\n try {\n list = black ? settings.hostBlackList : settings.hostWhiteList;\n listLength = list && list.length;\n trace = _.get(item, 'body.trace');\n\n // These two checks are important to come first as they are defaults\n // in case the list is missing or the trace is missing or not well-formed\n if (!list || listLength === 0) {\n return !black;\n }\n if (!trace || !trace.frames || trace.frames.length === 0) {\n return !black;\n }\n\n frameLength = trace.frames.length;\n for (i = 0; i < frameLength; i++) {\n frame = trace.frames[i];\n filename = frame.filename;\n\n if (!_.isType(filename, 'string')) {\n return !black;\n }\n\n for (j = 0; j < listLength; j++) {\n url = list[j];\n urlRegex = new RegExp(url);\n\n if (urlRegex.test(filename)) {\n return true;\n }\n }\n }\n } catch (e)\n /* istanbul ignore next */\n {\n if (black) {\n settings.hostBlackList = null;\n } else {\n settings.hostWhiteList = null;\n }\n var listName = black ? 'hostBlackList' : 'hostWhiteList';\n logger.error('Error while reading your configuration\\'s ' + listName + ' option. Removing custom ' + listName + '.', e);\n return !black;\n }\n return false;\n}\n\nfunction messageIsIgnored(logger) {\n return function(item, settings) {\n var exceptionMessage, i, ignoredMessages,\n len, messageIsIgnored, rIgnoredMessage,\n body, traceMessage, bodyMessage;\n\n try {\n messageIsIgnored = false;\n ignoredMessages = settings.ignoredMessages;\n\n if (!ignoredMessages || ignoredMessages.length === 0) {\n return true;\n }\n\n body = item.body;\n traceMessage = _.get(body, 'trace.exception.message');\n bodyMessage = _.get(body, 'message.body');\n\n exceptionMessage = traceMessage || bodyMessage;\n\n if (!exceptionMessage){\n return true;\n }\n\n len = ignoredMessages.length;\n for (i = 0; i < len; i++) {\n rIgnoredMessage = new RegExp(ignoredMessages[i], 'gi');\n messageIsIgnored = rIgnoredMessage.test(exceptionMessage);\n\n if (messageIsIgnored) {\n break;\n }\n }\n } catch(e)\n /* istanbul ignore next */\n {\n settings.ignoredMessages = null;\n logger.error('Error while reading your configuration\\'s ignoredMessages option. Removing custom ignoredMessages.');\n }\n\n return !messageIsIgnored;\n }\n}\n\nmodule.exports = {\n checkLevel: checkLevel,\n userCheckIgnore: userCheckIgnore,\n urlIsNotBlacklisted: urlIsNotBlacklisted,\n urlIsWhitelisted: urlIsWhitelisted,\n messageIsIgnored: messageIsIgnored\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/predicates.js\n// module id = 26\n// module chunks = 0","'use strict';\n\nvar _ = require('../utility');\nvar urlparser = require('./url');\nvar domUtil = require('./domUtility');\n\nvar defaults = {\n network: true,\n networkResponseHeaders: false,\n networkResponseBody: false,\n networkRequestBody: false,\n log: true,\n dom: true,\n navigation: true,\n connectivity: true\n};\n\nfunction replace(obj, name, replacement, replacements, type) {\n var orig = obj[name];\n obj[name] = replacement(orig);\n if (replacements) {\n replacements[type].push([obj, name, orig]);\n }\n}\n\nfunction restore(replacements, type) {\n var b;\n while (replacements[type].length) {\n b = replacements[type].shift();\n b[0][b[1]] = b[2];\n }\n}\n\nfunction nameFromDescription(description) {\n if (!description || !description.attributes) { return null; }\n var attrs = description.attributes;\n for (var a = 0; a < attrs.length; ++a) {\n if (attrs[a].key === 'name') {\n return attrs[a].value;\n }\n }\n return null;\n}\n\nfunction defaultValueScrubber(scrubFields) {\n var patterns = [];\n for (var i = 0; i < scrubFields.length; ++i) {\n patterns.push(new RegExp(scrubFields[i], 'i'));\n }\n return function(description) {\n var name = nameFromDescription(description);\n if (!name) { return false; }\n for (var i = 0; i < patterns.length; ++i) {\n if (patterns[i].test(name)) {\n return true;\n }\n }\n return false;\n };\n}\n\nfunction Instrumenter(options, telemeter, rollbar, _window, _document) {\n var autoInstrument = options.autoInstrument;\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n this.telemetryScrubber = options.telemetryScrubber;\n this.defaultValueScrubber = defaultValueScrubber(options.scrubFields);\n this.telemeter = telemeter;\n this.rollbar = rollbar;\n this._window = _window || {};\n this._document = _document || {};\n this.replacements = {\n network: [],\n log: [],\n navigation: [],\n connectivity: []\n };\n this.eventRemovers = {\n dom: [],\n connectivity: []\n };\n\n this._location = this._window.location;\n this._lastHref = this._location && this._location.href;\n}\n\nInstrumenter.prototype.configure = function(options) {\n var autoInstrument = options.autoInstrument;\n var oldSettings = _.merge(this.autoInstrument);\n if (options.enabled === false || autoInstrument === false) {\n this.autoInstrument = {};\n } else {\n if (!_.isType(autoInstrument, 'object')) {\n autoInstrument = defaults;\n }\n this.autoInstrument = _.merge(defaults, autoInstrument);\n }\n this.instrument(oldSettings);\n if (options.scrubTelemetryInputs !== undefined) {\n this.scrubTelemetryInputs = !!options.scrubTelemetryInputs;\n }\n if (options.telemetryScrubber !== undefined) {\n this.telemetryScrubber = options.telemetryScrubber;\n }\n};\n\nInstrumenter.prototype.instrument = function(oldSettings) {\n if (this.autoInstrument.network && !(oldSettings && oldSettings.network)) {\n this.instrumentNetwork();\n } else if (!this.autoInstrument.network && oldSettings && oldSettings.network) {\n this.deinstrumentNetwork();\n }\n\n if (this.autoInstrument.log && !(oldSettings && oldSettings.log)) {\n this.instrumentConsole();\n } else if (!this.autoInstrument.log && oldSettings && oldSettings.log) {\n this.deinstrumentConsole();\n }\n\n if (this.autoInstrument.dom && !(oldSettings && oldSettings.dom)) {\n this.instrumentDom();\n } else if (!this.autoInstrument.dom && oldSettings && oldSettings.dom) {\n this.deinstrumentDom();\n }\n\n if (this.autoInstrument.navigation && !(oldSettings && oldSettings.navigation)) {\n this.instrumentNavigation();\n } else if (!this.autoInstrument.navigation && oldSettings && oldSettings.navigation) {\n this.deinstrumentNavigation();\n }\n\n if (this.autoInstrument.connectivity && !(oldSettings && oldSettings.connectivity)) {\n this.instrumentConnectivity();\n } else if (!this.autoInstrument.connectivity && oldSettings && oldSettings.connectivity) {\n this.deinstrumentConnectivity();\n }\n};\n\nInstrumenter.prototype.deinstrumentNetwork = function() {\n restore(this.replacements, 'network');\n};\n\nInstrumenter.prototype.instrumentNetwork = function() {\n var self = this;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && _.isFunction(xhr[prop])) {\n replace(xhr, prop, function(orig) {\n return self.rollbar.wrap(orig);\n });\n }\n }\n\n if ('XMLHttpRequest' in this._window) {\n var xhrp = this._window.XMLHttpRequest.prototype;\n replace(xhrp, 'open', function(orig) {\n return function(method, url) {\n if (_.isType(url, 'string')) {\n this.__rollbar_xhr = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'network');\n\n replace(xhrp, 'send', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(data) {\n /* eslint-enable no-unused-vars */\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__rollbar_xhr) {\n if (xhr.__rollbar_xhr.status_code === null) {\n xhr.__rollbar_xhr.status_code = 0;\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n requestData = data;\n }\n xhr.__rollbar_event = self.telemeter.captureNetwork(xhr.__rollbar_xhr, 'xhr', undefined, requestData);\n }\n if (xhr.readyState < 2) {\n xhr.__rollbar_xhr.start_time_ms = _.now();\n }\n if (xhr.readyState > 3) {\n xhr.__rollbar_xhr.end_time_ms = _.now();\n\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n var header, i;\n if (headersConfig === true) {\n var allHeaders = xhr.getAllResponseHeaders();\n if (allHeaders) {\n var arr = allHeaders.trim().split(/[\\r\\n]+/);\n var parts, value;\n for (i=0; i < arr.length; i++) {\n parts = arr[i].split(': ');\n header = parts.shift();\n value = parts.join(': ');\n headers[header] = value;\n }\n }\n } else {\n for (i=0; i < headersConfig.length; i++) {\n header = headersConfig[i];\n headers[header] = xhr.getResponseHeader(header);\n }\n }\n } catch (e) {\n /* we ignore the errors here that could come from different\n * browser issues with the xhr methods */\n }\n }\n var body = null;\n if (self.autoInstrument.networkResponseBody) {\n try {\n body = xhr.responseText;\n } catch (e) {\n /* ignore errors from reading responseText */\n }\n }\n var response = null;\n if (body || headers) {\n response = {};\n if (body) {\n response.body = body;\n }\n if (headers) {\n response.headers = headers;\n }\n }\n if (response) {\n xhr.__rollbar_xhr.response = response;\n }\n try {\n var code = xhr.status;\n code = code === 1223 ? 204 : code;\n xhr.__rollbar_xhr.status_code = code;\n xhr.__rollbar_event.level = self.telemeter.levelFromStatus(code);\n } catch (e) {\n /* ignore possible exception from xhr.status */\n }\n }\n }\n }\n\n wrapProp('onload', xhr);\n wrapProp('onerror', xhr);\n wrapProp('onprogress', xhr);\n\n if ('onreadystatechange' in xhr && _.isFunction(xhr.onreadystatechange)) {\n replace(xhr, 'onreadystatechange', function(orig) {\n return self.rollbar.wrap(orig, undefined, onreadystatechangeHandler);\n });\n } else {\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n return orig.apply(this, arguments);\n }\n }, this.replacements, 'network');\n }\n\n if ('fetch' in this._window) {\n replace(this._window, 'fetch', function(orig) {\n /* eslint-disable no-unused-vars */\n return function(fn, t) {\n /* eslint-enable no-unused-vars */\n var args = new Array(arguments.length);\n for (var i=0, len=args.length; i < len; i++) {\n args[i] = arguments[i];\n }\n var input = args[0];\n var method = 'GET';\n var url;\n if (_.isType(input, 'string')) {\n url = input;\n } else if (input) {\n url = input.url;\n if (input.method) {\n method = input.method;\n }\n }\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n var metadata = {\n method: method,\n url: url,\n status_code: null,\n start_time_ms: _.now(),\n end_time_ms: null\n };\n var requestData = null;\n if (self.autoInstrument.networkRequestBody) {\n if (args[1] && args[1].body) {\n requestData = args[1].body;\n } else if (args[0] && !_.isType(args[0], 'string') && args[0].body) {\n requestData = args[0].body;\n }\n }\n self.telemeter.captureNetwork(metadata, 'fetch', undefined, requestData);\n return orig.apply(this, args).then(function (resp) {\n metadata.end_time_ms = _.now();\n metadata.status_code = resp.status;\n var headers = null;\n if (self.autoInstrument.networkResponseHeaders) {\n var headersConfig = self.autoInstrument.networkResponseHeaders;\n headers = {};\n try {\n if (headersConfig === true) {\n // This is unsupported in IE so we can't do it\n /*\n var allHeaders = resp.headers.entries();\n for (var pair of allHeaders) {\n headers[pair[0]] = pair[1];\n }\n */\n } else {\n for (var i=0; i < headersConfig.length; i++) {\n var header = headersConfig[i];\n headers[header] = resp.headers.get(header);\n }\n }\n } catch (e) {\n /* ignore probable IE errors */\n }\n }\n var response = null;\n if (headers) {\n response = {\n headers: headers\n };\n }\n if (response) {\n metadata.response = response;\n }\n return resp;\n });\n };\n }, this.replacements, 'network');\n }\n};\n\nInstrumenter.prototype.deinstrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n var b;\n while (this.replacements['log'].length) {\n b = this.replacements['log'].shift();\n this._window.console[b[0]] = b[1];\n }\n};\n\nInstrumenter.prototype.instrumentConsole = function() {\n if (!('console' in this._window && this._window.console.log)) {\n return;\n }\n\n var self = this;\n var c = this._window.console;\n\n function wrapConsole(method) {\n var orig = c[method];\n var origConsole = c;\n var level = method === 'warn' ? 'warning' : method;\n c[method] = function() {\n var args = Array.prototype.slice.call(arguments);\n var message = _.formatArgsAsString(args);\n self.telemeter.captureLog(message, level);\n if (orig) {\n Function.prototype.apply.call(orig, origConsole, args);\n }\n };\n self.replacements['log'].push([method, orig]);\n }\n var methods = ['debug','info','warn','error','log'];\n for (var i=0, len=methods.length; i < len; i++) {\n wrapConsole(methods[i]);\n }\n};\n\nInstrumenter.prototype.deinstrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n this.removeListeners('dom');\n};\n\nInstrumenter.prototype.instrumentDom = function() {\n if (!('addEventListener' in this._window || 'attachEvent' in this._window)) {\n return;\n }\n var clickHandler = this.handleClick.bind(this);\n var blurHandler = this.handleBlur.bind(this);\n this.addListener('dom', this._window, 'click', 'onclick', clickHandler, true);\n this.addListener('dom', this._window, 'blur', 'onfocusout', blurHandler, true);\n};\n\nInstrumenter.prototype.handleClick = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n var hasTag = e && e.tagName;\n var anchorOrButton = domUtil.isDescribedElement(e, 'a') || domUtil.isDescribedElement(e, 'button');\n if (hasTag && (anchorOrButton || domUtil.isDescribedElement(e, 'input', ['button', 'submit']))) {\n this.captureDomEvent('click', e);\n } else if (domUtil.isDescribedElement(e, 'input', ['checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value, e.checked);\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleBlur = function(evt) {\n try {\n var e = domUtil.getElementFromEvent(evt, this._document);\n if (e && e.tagName) {\n if (domUtil.isDescribedElement(e, 'textarea')) {\n this.captureDomEvent('input', e, e.value);\n } else if (domUtil.isDescribedElement(e, 'select') && e.options && e.options.length) {\n this.handleSelectInputChanged(e);\n } else if (domUtil.isDescribedElement(e, 'input') && !domUtil.isDescribedElement(e, 'input', ['button', 'submit', 'hidden', 'checkbox', 'radio'])) {\n this.captureDomEvent('input', e, e.value);\n }\n }\n } catch (exc) {\n // TODO: Not sure what to do here\n }\n};\n\nInstrumenter.prototype.handleSelectInputChanged = function(elem) {\n if (elem.multiple) {\n for (var i = 0; i < elem.options.length; i++) {\n if (elem.options[i].selected) {\n this.captureDomEvent('input', elem, elem.options[i].value);\n }\n }\n } else if (elem.selectedIndex >= 0 && elem.options[elem.selectedIndex]) {\n this.captureDomEvent('input', elem, elem.options[elem.selectedIndex].value);\n }\n};\n\nInstrumenter.prototype.captureDomEvent = function(subtype, element, value, isChecked) {\n if (value !== undefined) {\n if (this.scrubTelemetryInputs || (domUtil.getElementType(element) === 'password')) {\n value = '[scrubbed]';\n } else {\n var description = domUtil.describeElement(element);\n if (this.telemetryScrubber) {\n if (this.telemetryScrubber(description)) {\n value = '[scrubbed]';\n }\n } else if (this.defaultValueScrubber(description)) {\n value = '[scrubbed]';\n }\n }\n }\n var elementString = domUtil.elementArrayToString(domUtil.treeToArray(element));\n this.telemeter.captureDom(subtype, elementString, value, isChecked);\n};\n\nInstrumenter.prototype.deinstrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n restore(this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.instrumentNavigation = function() {\n var chrome = this._window.chrome;\n var chromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n // See https://github.com/angular/angular.js/pull/13945/files\n var hasPushState = !chromePackagedApp && this._window.history && this._window.history.pushState;\n if (!hasPushState) {\n return;\n }\n var self = this;\n replace(this._window, 'onpopstate', function(orig) {\n return function() {\n var current = self._location.href;\n self.handleUrlChange(self._lastHref, current);\n if (orig) {\n orig.apply(this, arguments);\n }\n };\n }, this.replacements, 'navigation');\n\n replace(this._window.history, 'pushState', function(orig) {\n return function() {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n if (url) {\n self.handleUrlChange(self._lastHref, url + '');\n }\n return orig.apply(this, arguments);\n };\n }, this.replacements, 'navigation');\n};\n\nInstrumenter.prototype.handleUrlChange = function(from, to) {\n var parsedHref = urlparser.parse(this._location.href);\n var parsedTo = urlparser.parse(to);\n var parsedFrom = urlparser.parse(from);\n this._lastHref = to;\n if (parsedHref.protocol === parsedTo.protocol && parsedHref.host === parsedTo.host) {\n to = parsedTo.path + (parsedTo.hash || '');\n }\n if (parsedHref.protocol === parsedFrom.protocol && parsedHref.host === parsedFrom.host) {\n from = parsedFrom.path + (parsedFrom.hash || '');\n }\n this.telemeter.captureNavigation(from, to);\n};\n\nInstrumenter.prototype.deinstrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.removeListeners('connectivity');\n } else {\n restore(this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.instrumentConnectivity = function() {\n if (!('addEventListener' in this._window || 'body' in this._document)) {\n return;\n }\n if (this._window.addEventListener) {\n this.addListener('connectivity', this._window, 'online', undefined, function() {\n this.telemeter.captureConnectivityChange('online');\n }.bind(this), true);\n this.addListener('connectivity', this._window, 'offline', undefined, function() {\n this.telemeter.captureConnectivityChange('offline');\n }.bind(this), true);\n } else {\n var self = this;\n replace(this._document.body, 'ononline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('online');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n replace(this._document.body, 'onoffline', function(orig) {\n return function() {\n self.telemeter.captureConnectivityChange('offline');\n if (orig) {\n orig.apply(this, arguments);\n }\n }\n }, this.replacements, 'connectivity');\n }\n};\n\nInstrumenter.prototype.addListener = function(section, obj, type, altType, handler, capture) {\n if (obj.addEventListener) {\n obj.addEventListener(type, handler, capture);\n this.eventRemovers[section].push(function() {\n obj.removeEventListener(type, handler, capture);\n });\n } else if (altType) {\n obj.attachEvent(altType, handler);\n this.eventRemovers[section].push(function() {\n obj.detachEvent(altType, handler);\n });\n }\n};\n\nInstrumenter.prototype.removeListeners = function(section) {\n var r;\n while (this.eventRemovers[section].length) {\n r = this.eventRemovers[section].shift();\n r();\n }\n};\n\nmodule.exports = Instrumenter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/telemetry.js\n// module id = 27\n// module chunks = 0","'use strict';\n\nfunction getElementType(e) {\n return (e.getAttribute('type') || '').toLowerCase();\n}\n\nfunction isDescribedElement(element, type, subtypes) {\n if (element.tagName.toLowerCase() !== type.toLowerCase()) {\n return false;\n }\n if (!subtypes) {\n return true;\n }\n element = getElementType(element);\n for (var i = 0; i < subtypes.length; i++) {\n if (subtypes[i] === element) {\n return true;\n }\n }\n return false;\n}\n\nfunction getElementFromEvent(evt, doc) {\n if (evt.target) {\n return evt.target;\n }\n if (doc && doc.elementFromPoint) {\n return doc.elementFromPoint(evt.clientX, evt.clientY);\n }\n return undefined;\n}\n\nfunction treeToArray(elem) {\n var MAX_HEIGHT = 5;\n var out = [];\n var nextDescription;\n for (var height = 0; elem && height < MAX_HEIGHT; height++) {\n nextDescription = describeElement(elem);\n if (nextDescription.tagName === 'html') {\n break;\n }\n out.unshift(nextDescription);\n elem = elem.parentNode;\n }\n return out;\n}\n\nfunction elementArrayToString(a) {\n var MAX_LENGTH = 80;\n var separator = ' > ', separatorLength = separator.length;\n var out = [], len = 0, nextStr, totalLength;\n\n for (var i = a.length - 1; i >= 0; i--) {\n nextStr = descriptionToString(a[i]);\n totalLength = len + (out.length * separatorLength) + nextStr.length;\n if (i < a.length - 1 && totalLength >= MAX_LENGTH + 3) {\n out.unshift('...');\n break;\n }\n out.unshift(nextStr);\n len += nextStr.length;\n }\n return out.join(separator);\n}\n\nfunction descriptionToString(desc) {\n if (!desc || !desc.tagName) {\n return '';\n }\n var out = [desc.tagName];\n if (desc.id) {\n out.push('#' + desc.id);\n }\n if (desc.classes) {\n out.push('.' + desc.classes.join('.'));\n }\n for (var i = 0; i < desc.attributes.length; i++) {\n out.push('[' + desc.attributes[i].key + '=\"' + desc.attributes[i].value + '\"]');\n }\n\n return out.join('');\n}\n\n/**\n * Input: a dom element\n * Output: null if tagName is falsey or input is falsey, else\n * {\n * tagName: String,\n * id: String | undefined,\n * classes: [String] | undefined,\n * attributes: [\n * {\n * key: OneOf(type, name, title, alt),\n * value: String\n * }\n * ]\n * }\n */\nfunction describeElement(elem) {\n if (!elem || !elem.tagName) {\n return null;\n }\n var out = {}, className, key, attr, i;\n out.tagName = elem.tagName.toLowerCase();\n if (elem.id) {\n out.id = elem.id;\n }\n className = elem.className;\n if (className && (typeof className === 'string')) {\n out.classes = className.split(/\\s+/);\n }\n var attributes = ['type', 'name', 'title', 'alt'];\n out.attributes = [];\n for (i = 0; i < attributes.length; i++) {\n key = attributes[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.attributes.push({key: key, value: attr});\n }\n }\n return out;\n}\n\nmodule.exports = {\n describeElement: describeElement,\n descriptionToString: descriptionToString,\n elementArrayToString: elementArrayToString,\n treeToArray: treeToArray,\n getElementFromEvent: getElementFromEvent,\n isDescribedElement: isDescribedElement,\n getElementType: getElementType\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/browser/domUtility.js\n// module id = 28\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/chrome_extension/background.js b/examples/chrome_extension/background.js index eeae582e9..1a6db467b 100644 --- a/examples/chrome_extension/background.js +++ b/examples/chrome_extension/background.js @@ -11,7 +11,7 @@ var _rollbarConfig = { }; // Rollbar Snippet -!function(r){function o(n){if(e[n])return e[n].exports;var t=e[n]={exports:{},id:n,loaded:!1};return r[n].call(t.exports,t,t.exports,o),t.loaded=!0,t.exports}var e={};return o.m=r,o.c=e,o.p="",o(0)}([function(r,o,e){"use strict";var n=e(1),t=e(4);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdnjs.cloudflare.com/ajax/libs/rollbar.js/2.6.0/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,o,e){"use strict";function n(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}function t(r,o){this.options=r,this._rollbarOldOnError=null;var e=s++;this.shimId=function(){return e},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[e]={handler:o,messages:[]})}function a(r,o){if(r){var e=o.globalAlias||"Rollbar";if("object"==typeof r[e])return r[e];r._rollbarShims={},r._rollbarWrappedError=null;var t=new p(o);return n(function(){o.captureUncaught&&(t._rollbarOldOnError=r.onerror,i.captureUncaughtExceptions(r,t,!0),i.wrapGlobals(r,t,!0)),o.captureUnhandledRejections&&i.captureUnhandledRejections(r,t,!0);var n=o.autoInstrument;return o.enabled!==!1&&(void 0===n||n===!0||"object"==typeof n&&n.network)&&r.addEventListener&&(r.addEventListener("load",t.captureLoad.bind(t)),r.addEventListener("DOMContentLoaded",t.captureDomContentLoaded.bind(t))),r[e]=t,t})()}}function l(r){return n(function(){var o=this,e=Array.prototype.slice.call(arguments,0),n={shim:o,method:r,args:e,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)})}var i=e(2),s=0,d=e(3),c=function(r,o){return new t(r,o)},p=function(r){return new d(c,r)};t.prototype.loadFull=function(r,o,e,t,a){var l=function(){var o;if(void 0===r._rollbarDidLoad){o=new Error("rollbar.js did not load");for(var e,n,t,l,i=0;e=r._rollbarShims[i++];)for(e=e.messages||[];n=e.shift();)for(t=n.args||[],i=0;i diff --git a/examples/snippet.html b/examples/snippet.html index 6551b21bc..758331e86 100644 --- a/examples/snippet.html +++ b/examples/snippet.html @@ -13,7 +13,7 @@ diff --git a/examples/test.html b/examples/test.html index 70c43dbd2..a7af048a7 100644 --- a/examples/test.html +++ b/examples/test.html @@ -35,7 +35,7 @@ diff --git a/examples/universal-browser/test.html b/examples/universal-browser/test.html index e8c73f140..21453d1ba 100644 --- a/examples/universal-browser/test.html +++ b/examples/universal-browser/test.html @@ -35,7 +35,7 @@