Plugin Directory

Changeset 2112768


Ignore:
Timestamp:
06/26/2019 12:29:28 PM (7 years ago)
Author:
leadin
Message:

Release version 7.5.3

Location:
leadin
Files:
89 added
3 deleted
49 edited

Legend:

Unmodified
Added
Removed
  • leadin/trunk/changelog.txt

    r2106268 r2112768  
     1= 7.5.3 (2019.06.26) =
     2- Rename "chatflow" to "live chat"
     3- Update readme.txt
     4- Update banners
     5- Fix themes colors
     6- Refactor code style
     7
    18= 7.5.2 (2019.06.14) =
    29- Add webpack and use ES6
  • leadin/trunk/inc/class-leadin.php

    r2097340 r2112768  
    11<?php
    22
    3 // =============================================
    4 // WPLeadIn Class
    5 // =============================================
    6 class WPLeadIn {
     3/**
     4 * Leadin Class
     5 */
     6class Leadin {
    77
    8   /**
    9   * Class constructor
    10   */
    11   function __construct() {
    12     global $pagenow;
     8    /**
     9    * Class constructor
     10    */
     11    public function __construct() {
     12        global $pagenow;
    1313
    14     add_action( 'wp_enqueue_scripts', array($this, 'add_common_frontend_scripts' ) );
    15     add_action( 'admin_enqueue_scripts', array($this, 'add_common_frontend_scripts' ) );
     14        add_action( 'wp_enqueue_scripts', array( $this, 'add_common_frontend_scripts' ) );
     15        add_action( 'admin_enqueue_scripts', array( $this, 'add_common_frontend_scripts' ) );
    1616
    17     if ( is_admin() ) {
    18       if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) {
    19         $li_wp_admin = new WPLeadInAdmin();
    20       }
    21     } else {
    22       // Adds the leadin-tracking script to wp-login.php page which doesnt hook into the enqueue logic
    23       if ( $this->leadin_is_login_or_register_page() ) {
    24         add_action( 'login_enqueue_scripts', array( $this, 'add_leadin_frontend_scripts' ) );
    25       } else {
    26         add_action( 'wp_enqueue_scripts', array( $this, 'add_leadin_frontend_scripts' ) );
    27       }
    28     }
    29   }
     17        if ( is_admin() ) {
     18            if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) {
     19                $li_wp_admin = new LeadinAdmin();
     20            }
     21        } else {
     22            // Adds the leadin-tracking script to wp-login.php page which doesnt hook into the enqueue logic.
     23            if ( $this->leadin_is_login_or_register_page() ) {
     24                add_action( 'login_enqueue_scripts', array( $this, 'add_leadin_frontend_scripts' ) );
     25            } else {
     26                add_action( 'wp_enqueue_scripts', array( $this, 'add_leadin_frontend_scripts' ) );
     27            }
     28        }
     29    }
    3030
    31   // =============================================
    32   // Scripts & Styles
    33   // =============================================
    34   /**
    35    * Adds front end javascript + initializes ajax object
    36    */
     31    // =============================================
     32    // Scripts & Styles
     33    // =============================================
     34    /**
     35     * Adds front end javascript + initializes ajax object
     36     */
     37    public function add_leadin_frontend_scripts() {
     38        add_filter( 'script_loader_tag', array( $this, 'leadin_add_embed_script_attributes' ), 10, 2 );
    3739
    38   function add_leadin_frontend_scripts() {
     40        $embed_domain = constant( 'LEADIN_SCRIPT_LOADER_DOMAIN' );
     41        $portal_id    = get_option( 'leadin_portalId' );
    3942
    40     add_filter( 'script_loader_tag', array( $this, 'leadin_add_embed_script_attributes' ), 10, 2 );
     43        if ( empty( $portal_id ) ) {
     44            echo esc_html( '<!-- HubSpot WordPress Plugin v' . LEADIN_PLUGIN_VERSION . ': embed JS disabled as a portalId has not yet been configured -->' );
     45            return;
     46        }
    4147
    42     $embedDomain = constant( 'LEADIN_SCRIPT_LOADER_DOMAIN' );
    43     $portalId    = get_option( 'leadin_portalId' );
     48        $embed_url = "//$embed_domain/$portal_id.js?integration=wordpress";
     49        $embed_id  = 'leadin-scriptloader-js';
    4450
    45     if ( empty( $portalId ) ) {
    46       echo '<!-- HubSpot WordPress Plugin v' . LEADIN_PLUGIN_VERSION . ': embed JS disabled as a portalId has not yet been configured -->';
    47       return;
    48     }
     51        if ( is_single() ) {
     52            $page_type = 'post';
     53        } elseif ( is_front_page() ) {
     54            $page_type = 'home';
     55        } elseif ( is_archive() ) {
     56            $page_type = 'archive';
     57        } elseif ( $this->leadin_is_login_or_register_page() ) {
     58            $page_type = 'login';
     59        } elseif ( is_page() ) {
     60            $page_type = 'page';
     61        } else {
     62            $page_type = 'other';
     63        }
    4964
    50     $embedUrl = '//' . $embedDomain . '/' . $portalId . '.js?integration=wordpress';
    51     $embedId  = 'leadin-scriptloader-js';
     65        $leadin_wordpress_info = array(
     66            'userRole'            => ( is_user_logged_in() ) ? leadin_get_user_role() : 'visitor',
     67            'pageType'            => $page_type,
     68            'leadinPluginVersion' => LEADIN_PLUGIN_VERSION,
     69        );
    5270
    53     if ( is_single() ) {
    54       $page_type = 'post';
    55     } elseif ( is_front_page() ) {
    56       $page_type = 'home';
    57     } elseif ( is_archive() ) {
    58       $page_type = 'archive';
    59     } elseif ( $this->leadin_is_login_or_register_page() ) {
    60       $page_type = 'login';
    61     } elseif ( is_page() ) {
    62       $page_type = 'page';
    63     } else {
    64       $page_type = 'other';
    65     }
     71        wp_register_script( $embed_id, $embed_url, array( 'jquery' ), LEADIN_PLUGIN_VERSION, true );
     72        wp_localize_script( $embed_id, 'leadin_wordpress', $leadin_wordpress_info );
     73        wp_enqueue_script( $embed_id );
     74        $this->add_page_analytics();
     75    }
    6676
    67     $leadin_wordpress_info = array(
    68       'userRole'            => ( is_user_logged_in() ) ? leadin_get_user_role() : 'visitor',
    69       'pageType'            => $page_type,
    70       'leadinPluginVersion' => LEADIN_PLUGIN_VERSION,
    71     );
     77    /**
     78     * Add leadin.css
     79     */
     80    public function add_common_frontend_scripts() {
     81        if ( is_user_logged_in() ) {
     82            wp_register_style( 'leadin-css', LEADIN_PATH . '/style/leadin.css', array(), LEADIN_PLUGIN_VERSION );
     83            wp_enqueue_style( 'leadin-css' );
     84        }
     85    }
    7286
    73     wp_register_script( $embedId, $embedUrl, array( 'jquery' ), false, true );
    74     wp_localize_script( $embedId, 'leadin_wordpress', $leadin_wordpress_info );
    75     wp_enqueue_script( $embedId );
    76     $this->add_page_analytics();
    77   }
     87    /**
     88     * Add tracking code
     89     */
     90    private function add_page_analytics() {
     91        ?>
     92        <!-- DO NOT COPY THIS SNIPPET! Start of Page Analytics Tracking for HubSpot WordPress plugin v'.LEADIN_PLUGIN_VERSION.' -->
     93        <script type="text/javascript">
     94            var _hsq = _hsq || [];
     95            <?php
     96                // Pass along the correct content-type.
     97            if ( is_single() ) {
     98                echo '_hsq.push(["setContentType", "blog-post"]);' . "\n";
     99            } elseif ( is_archive() || is_search() ) {
     100                echo '_hsq.push(["setContentType", "listing-page"]);' . "\n";
     101            } else {
     102                echo '_hsq.push(["setContentType", "standard-page"]);' . "\n";
     103            }
     104            ?>
     105        </script>
     106        <!-- DO NOT COPY THIS SNIPPET! End of Page Analytics Tracking for HubSpot WordPress plugin -->
     107        <?php
     108    }
    78109
    79   function add_common_frontend_scripts() {
    80     if ( is_user_logged_in() ) {
    81       wp_register_style( 'leadin-css', LEADIN_PATH.'/style/leadin.css' );
    82       wp_enqueue_style( 'leadin-css' );
    83     }
    84   }
     110    /**
     111     * Action script-loader-tag
     112     *
     113     * @param string $tag tag name.
     114     * @param string $handle handle.
     115     */
     116    public function leadin_add_embed_script_attributes( $tag, $handle ) {
     117        if ( 'leadin-scriptloader-js' === $handle ) {
     118            return str_replace( ' src', ' async defer src', $tag );
     119        } else {
     120            return $tag;
     121        }
     122    }
    85123
    86   /* HubSpot page analytics */
    87   function add_page_analytics() {
    88     echo "\n".'<!-- DO NOT COPY THIS SNIPPET! Start of Page Analytics Tracking for HubSpot WordPress plugin v'.LEADIN_PLUGIN_VERSION.' -->'."\n";
    89     echo '<script type="text/javascript">'."\n";
    90 
    91     echo 'var _hsq = _hsq || [];'."\n";
    92     // Pass along the correct content-type
    93     if ( is_single () ) {
    94         echo '_hsq.push(["setContentType", "blog-post"]);' . "\n";
    95     }  else if ( is_archive () || is_search() ) {
    96         echo '_hsq.push(["setContentType", "listing-page"]);' . "\n";
    97     } else {
    98         echo '_hsq.push(["setContentType", "standard-page"]);' . "\n";
    99     }
    100 
    101     echo '</script>'."\n";
    102     echo '<!-- DO NOT COPY THIS SNIPPET! End of Page Analytics Tracking for HubSpot WordPress plugin -->'."\n";
    103   }
    104 
    105   function leadin_add_embed_script_attributes( $tag, $handle ) {
    106     if ( $handle == 'leadin-scriptloader-js' ) {
    107       return str_replace( ' src', ' async defer src', $tag );
    108     } else {
    109       return $tag;
    110     }
    111   }
    112 
    113   public static function leadin_is_login_or_register_page() {
    114     return in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) );
    115   }
     124    /**
     125     * Return true if the current page is login or register
     126     */
     127    public static function leadin_is_login_or_register_page() {
     128        return in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ), true );
     129    }
    116130}
    117131
  • leadin/trunk/inc/leadin-constants.php

    r2077791 r2112768  
    22
    33if ( ! defined( 'LEADIN_UTM_SOURCE' ) ) {
    4   define( 'LEADIN_UTM_SOURCE', 'leadin%20repo%20plugin' );
     4    define( 'LEADIN_UTM_SOURCE', 'leadin%20repo%20plugin' );
    55}
    66
    77if ( ! defined( 'LEADIN_UTM_MEDIUM' ) ) {
    8   define( 'LEADIN_UTM_MEDIUM', 'referral' );
     8    define( 'LEADIN_UTM_MEDIUM', 'referral' );
    99}
    1010
    1111if ( ! defined( 'LEADIN_UTM_CONTENT' ) ) {
    12   define( 'LEADIN_UTM_CONTENT', 'e10' );
     12    define( 'LEADIN_UTM_CONTENT', 'e10' );
    1313}
    1414
    1515if ( ! defined( 'LEADIN_UTM_CAMPAIGN' ) ) {
    16   define( 'LEADIN_UTM_CAMPAIGN', 'one%20click%20updater' );
     16    define( 'LEADIN_UTM_CAMPAIGN', 'one%20click%20updater' );
    1717}
  • leadin/trunk/inc/leadin-disconnect.php

    r2077791 r2112768  
    11<?php
    22if ( ! defined( 'LEADIN_PLUGIN_VERSION' ) ) {
    3   wp_die( '', '', 403 );
     3    wp_die( '', '', 403 );
    44}
    55
    66if ( is_admin() ) {
    7   add_action( 'wp_ajax_leadin_disconnect_ajax', 'leadin_disconnect_ajax' );
     7    add_action( 'wp_ajax_leadin_disconnect_ajax', 'leadin_disconnect_ajax' );
    88}
    99
     10/**
     11 * AJAX handler to disconnect portal id
     12 */
    1013function leadin_disconnect_ajax() {
    11   if ( get_option( 'leadin_portalId' ) ) {
    12     delete_option( 'leadin_portalId' );
    13     delete_option( 'leadin_slumber_mode' );
    14     delete_option( 'leadin_hapikey' );
     14    if ( get_option( 'leadin_portalId' ) ) {
     15        delete_option( 'leadin_portalId' );
     16        delete_option( 'leadin_slumber_mode' );
     17        delete_option( 'leadin_hapikey' );
    1518
    16     delete_option( 'leadin_accessToken' );
    17     delete_option( 'leadin_refreshToken' );
    18     delete_option( 'leadin_oauth_mode' );
    19     delete_option( 'leadin_userId' );
    20     delete_option( 'leadin_connectionTimeInMs' );
     19        delete_option( 'leadin_accessToken' );
     20        delete_option( 'leadin_refreshToken' );
     21        delete_option( 'leadin_oauth_mode' );
     22        delete_option( 'leadin_userId' );
     23        delete_option( 'leadin_connectionTimeInMs' );
    2124
    22     wp_die( '{"message": "Success!"}' );
    23   } else {
    24     error_log( 'Disconnect error' );
    25     wp_die( '{"error": "No leadin_portalId found, cannot disconnect."}', '', 400 );
    26   }
    27 
     25        wp_die( '{"message": "Success!"}' );
     26    } else {
     27        wp_die( '{"error": "No leadin_portalId found, cannot disconnect."}', '', 400 );
     28    }
    2829}
    29 
    30 
  • leadin/trunk/inc/leadin-functions.php

    r2106268 r2112768  
    11<?php
     2/**
     3 * Function file
     4 *
     5 * @phpcs:disable WordPress.PHP.DevelopmentFunctions.error_log_error_log
     6 * @phpcs:disable WordPress.PHP.DevelopmentFunctions.error_log_print_r
     7 */
    28
    39if ( ! defined( 'LEADIN_PLUGIN_VERSION' ) ) {
    4   wp_die( '', '', 403 );
     10    wp_die( '', '', 403 );
    511}
    612
    713if ( ! defined( 'LEADIN_PORTAL_ID' ) ) {
    8   DEFINE( 'LEADIN_PORTAL_ID', intval( get_option( 'leadin_portalId' ) ) );
     14    DEFINE( 'LEADIN_PORTAL_ID', intval( get_option( 'leadin_portalId' ) ) );
    915}
    1016
     
    1218 * Logs a debug statement to /wp-content/debug.log
    1319 *
    14  * @param   string
     20 * @param string $message message to log.
    1521 */
    1622function leadin_log_debug( $message ) {
    17   if ( WP_DEBUG === true ) {
    18     if ( is_array( $message ) || is_object( $message ) ) {
    19       error_log( print_r( $message, true ) );
    20     } else {
    21       error_log( $message );
    22     }
    23   }
     23    if ( WP_DEBUG === true ) {
     24        if ( is_array( $message ) || is_object( $message ) ) {
     25            error_log( print_r( $message, true ) );
     26        } else {
     27            error_log( $message );
     28        }
     29    }
    2430}
    2531
     
    2834 */
    2935function leadin_get_user_role() {
    30   global $current_user;
     36    global $current_user;
    3137
    32   $user_roles = $current_user->roles;
    33   $user_role  = array_shift( $user_roles );
     38    $user_roles = $current_user->roles;
     39    $user_role  = array_shift( $user_roles );
    3440
    35   return $user_role;
     41    return $user_role;
    3642}
    3743
    3844/**
    3945 * Return query string from object
     46 *
     47 * @param array $arr query parameters to stringify.
    4048 */
    41 function leadin_http_build_query($arr) {
    42   return http_build_query( $arr, null, ini_get('arg_separator.output'), PHP_QUERY_RFC3986 );
     49function leadin_http_build_query( $arr ) {
     50    return http_build_query( $arr, null, ini_get( 'arg_separator.output' ), PHP_QUERY_RFC3986 );
    4351}
    4452
     
    4654 * Return the given version until the patch version
    4755 * eg: 6.4.2.1-beta => 6.4.2
     56 *
     57 * @param string $version version.
    4858 */
    49 function leadin_parse_version($version) {
    50   preg_match('/^\d+(\.\d+){0,2}/', $version, $match);
    51   if ( empty( $match ) ) {
    52     return '';
    53   }
    54   return $match[0];
     59function leadin_parse_version( $version ) {
     60    preg_match( '/^\d+(\.\d+){0,2}/', $version, $match );
     61    if ( empty( $match ) ) {
     62        return '';
     63    }
     64    return $match[0];
    5565}
    5666
     67/**
     68 * Return array of query parameters to add to the iframe src
     69 */
    5770function leadin_get_query_params() {
    58   global $wp_version;
     71    global $wp_version;
    5972
    60   return leadin_http_build_query( array(
    61     'l'     => get_locale(),
    62     'php'   => leadin_parse_version( phpversion() ),
    63     'v'     => LEADIN_PLUGIN_VERSION,
    64     'wp'    => leadin_parse_version( $wp_version ),
    65     'theme' => get_option('stylesheet'),
    66   ) );
     73    return leadin_http_build_query(
     74        array(
     75            'l'     => get_locale(),
     76            'php'   => leadin_parse_version( phpversion() ),
     77            'v'     => LEADIN_PLUGIN_VERSION,
     78            'wp'    => leadin_parse_version( $wp_version ),
     79            'theme' => get_option( 'stylesheet' ),
     80        )
     81    );
    6782}
    6883
     
    7186 */
    7287function leadin_get_affiliate_code() {
    73   $affiliate_link = get_option( 'hubspot_affiliate_code' );
    74   preg_match('/(?:(?:hubs\.to)|(?:mbsy\.co))\/([a-zA-Z0-9]+)/', $affiliate_link, $matches);
    75   if (sizeof($matches) === 2) {
    76     return $matches[1];
    77   } else {
    78     return $affiliate_link;
    79   }
     88    $affiliate_link = get_option( 'hubspot_affiliate_code' );
     89    preg_match( '/(?:(?:hubs\.to)|(?:mbsy\.co))\/([a-zA-Z0-9]+)/', $affiliate_link, $matches );
     90    if ( count( $matches ) === 2 ) {
     91        return $matches[1];
     92    } else {
     93        return $affiliate_link;
     94    }
    8095}
    8196
     
    8499 */
    85100function leadin_get_signup_url() {
    86   // Get attribution string.
    87   $acquisition_option = get_option( 'hubspot_acquisition_attribution', '' );
    88   parse_str( $acquisition_option, $signup_params );
    89   $signup_params['enableCollectedForms'] = 'true';
     101    // Get attribution string.
     102    $acquisition_option = get_option( 'hubspot_acquisition_attribution', '' );
     103    parse_str( $acquisition_option, $signup_params );
     104    $signup_params['enableCollectedForms'] = 'true';
    90105
    91   // Get leadin query.
    92   $leadin_query = leadin_get_query_params();
    93   parse_str( $leadin_query, $leadin_params );
     106    // Get leadin query.
     107    $leadin_query = leadin_get_query_params();
     108    parse_str( $leadin_query, $leadin_params );
    94109
    95   $signup_params = array_merge( $signup_params, $leadin_params );
     110    $signup_params = array_merge( $signup_params, $leadin_params );
    96111
    97   // Add signup pre-fill info.
    98   $wp_user = wp_get_current_user();
    99   $signup_params['firstName'] = $wp_user->user_firstname;
    100   $signup_params['lastName'] = $wp_user->user_lastname;
    101   $signup_params['email'] = $wp_user->user_email;
    102   $signup_params['company'] = get_bloginfo( 'name' );
    103   $signup_params['domain'] = get_site_url();
     112    // Add signup pre-fill info.
     113    $wp_user                    = wp_get_current_user();
     114    $signup_params['firstName'] = $wp_user->user_firstname;
     115    $signup_params['lastName'] = $wp_user->user_lastname;
     116    $signup_params['email']    = $wp_user->user_email;
     117    $signup_params['company']  = get_bloginfo( 'name' );
     118    $signup_params['domain']    = get_site_url();
    104119
    105   $affiliate_code = leadin_get_affiliate_code();
    106   $signup_url = LEADIN_SIGNUP_BASE_URL . '/signup/wordpress?';
     120    $affiliate_code = leadin_get_affiliate_code();
     121    $signup_url    = LEADIN_SIGNUP_BASE_URL . '/signup/wordpress?';
    107122
    108   if (LEADIN_SIGNUP_BASE_URL !== LEADIN_BASE_URL) {
    109     $signup_params['redirectBaseUrl'] = LEADIN_BASE_URL;
    110   }
     123    if ( LEADIN_SIGNUP_BASE_URL !== LEADIN_BASE_URL ) {
     124        $signup_params['redirectBaseUrl'] = LEADIN_BASE_URL;
     125    }
    111126
    112   if ($affiliate_code) {
    113     $signup_url .= leadin_http_build_query( $signup_params );
    114     $destination_url = rawurlencode($signup_url);
    115     return "https://mbsy.co/$affiliate_code?url=$destination_url";
    116   }
     127    if ( $affiliate_code ) {
     128        $signup_url    .= leadin_http_build_query( $signup_params );
     129        $destination_url = rawurlencode( $signup_url );
     130        return "https://mbsy.co/$affiliate_code?url=$destination_url";
     131    }
    117132
    118   $signup_params['utm_source'] = 'wordpress-plugin';
    119   $signup_params['utm_medium'] = 'marketplaces';
     133    $signup_params['utm_source'] = 'wordpress-plugin';
     134    $signup_params['utm_medium'] = 'marketplaces';
    120135
    121   return $signup_url . leadin_http_build_query( $signup_params );
     136    return $signup_url . leadin_http_build_query( $signup_params );
    122137}
    123138
     139/**
     140 * Return ajax url
     141 */
    124142function leadin_get_ajax_url() {
    125   $ajaxUrl = get_admin_url( get_current_blog_id(), 'admin-ajax.php' );
    126   return parse_url( $ajaxUrl )['path'];
     143    $ajax_url = get_admin_url( get_current_blog_id(), 'admin-ajax.php' );
     144    return parse_url( $ajax_url )['path'];
    127145}
    128146
     
    134152 */
    135153function leadin_get_iframe_src() {
    136   $portal_id = get_option('leadin_portalId');
    137   $regex = "/^leadin(_|$)/";
    138   $page = null;
     154    $portal_id = get_option( 'leadin_portalId' );
     155    $regex     = '/^leadin(_|$)/';
     156    $page      = null;
    139157
    140   if ( isset( $_GET['page'] ) ) {
    141     $page = $_GET["page"];
    142   }
     158    if ( isset( $_GET['page'] ) ) {
     159        $page = wp_unslash( $_GET['page'] );
     160    }
    143161
    144   if ( empty( $portal_id ) ) {
    145     return leadin_get_signup_url();
    146   }
     162    if ( empty( $portal_id ) ) {
     163        return leadin_get_signup_url();
     164    }
    147165
    148   $pathname = preg_replace( $regex, "", $page );
    149   return LEADIN_BASE_URL . "/hubspot-plugin/$portal_id/$pathname?" . leadin_get_query_params();
     166    $pathname = preg_replace( $regex, '', $page );
     167    return LEADIN_BASE_URL . "/hubspot-plugin/$portal_id/$pathname?" . leadin_get_query_params();
    150168}
    151169
     170/**
     171 * Get background iframe src
     172 */
    152173function leadin_get_background_iframe_src() {
    153   $portal_id = get_option('leadin_portalId');
    154   $portal_id_url = '';
     174    $portal_id     = get_option( 'leadin_portalId' );
     175    $portal_id_url = '';
    155176
    156   if ( ! empty( $portal_id ) ) {
    157     $portal_id_url = "/$portal_id";
    158   }
     177    if ( ! empty( $portal_id ) ) {
     178        $portal_id_url = "/$portal_id";
     179    }
    159180
    160   return LEADIN_BASE_URL . "/hubspot-plugin$portal_id_url/background?" . leadin_get_query_params();
     181    return LEADIN_BASE_URL . "/hubspot-plugin$portal_id_url/background?" . leadin_get_query_params();
    161182}
    162183
    163 function leadin_get_form_shortcode($form_id) {
    164   $portal_id = get_option('leadin_portalId');
    165   return "[hubspot type=form portal=$portal_id id=$form_id]";
     184/**
     185 * Get shortcode for form
     186 *
     187 * @param string $form_id form's id.
     188 */
     189function leadin_get_form_shortcode( $form_id ) {
     190    $portal_id = get_option( 'leadin_portalId' );
     191    return "[hubspot type=form portal=$portal_id id=$form_id]";
    166192}
  • leadin/trunk/inc/leadin-mark-outdated.php

    r2093795 r2112768  
    11<?php
    22if ( ! defined( 'LEADIN_PLUGIN_VERSION' ) ) {
    3   wp_die( '', '', 403 );
     3    wp_die( '', '', 403 );
    44}
    55
    66if ( is_admin() ) {
    7   add_action( 'wp_ajax_leadin_mark_outdated', 'mark_outdated_ajax' );
     7    add_action( 'wp_ajax_leadin_mark_outdated', 'leadin_mark_outdated_ajax' );
    88}
    99
    10 function mark_outdated_ajax() {
    11   update_option( 'leadin_outdated_version', true );
    12   wp_die( '{"message": "Success!"}' );
     10/**
     11 * AJAX handler to set the current version as outdated
     12 */
     13function leadin_mark_outdated_ajax() {
     14    update_option( 'leadin_outdated_version', true );
     15    wp_die( '{"message": "Success!"}' );
    1316}
  • leadin/trunk/inc/leadin-registration.php

    r2077791 r2112768  
    11<?php
    22if ( ! defined( 'LEADIN_PLUGIN_VERSION' ) ) {
    3   wp_die( '', '', 403 );
     3    wp_die( '', '', 403 );
    44}
    55
    66if ( is_admin() ) {
    7   add_action( 'wp_ajax_leadin_registration_ajax', 'leadin_registration_ajax' ); // Call when user logged in
     7    add_action( 'wp_ajax_leadin_registration_ajax', 'leadin_registration_ajax' );
    88}
    99
     10/**
     11 * AJAX handler to connect portal to wordpress
     12 */
    1013function leadin_registration_ajax() {
    11   delete_option( 'leadin_hapikey' );
    12   $existingPortalId = get_option( 'leadin_portalId' );
     14    delete_option( 'leadin_hapikey' );
     15    $existing_portal_id = get_option( 'leadin_portalId' );
    1316
    14   if ( ! empty( $existingPortalId ) ) {
    15     wp_die( '{"error": "Registration is already complete for this portal"}', '', 400 );
    16   }
     17    if ( ! empty( $existing_portal_id ) ) {
     18        wp_die( '{"error": "Registration is already complete for this portal"}', '', 400 );
     19    }
    1720
    18   $requestBody = file_get_contents( 'php://input' );
    19   $data = json_decode( $requestBody, true );
     21    $request_body = file_get_contents( 'php://input' );
     22    $data         = json_decode( $request_body, true );
    2023
    21   $newPortalId = $data['portalId'];
     24    $new_portal_id = $data['portalId'];
    2225
    23   if ( empty( $newPortalId ) ) {
    24     error_log( 'Registration error' );
     26    if ( empty( $new_portal_id ) ) {
     27        $error_body = array(
     28            'error'   => 'Registration missing required fields',
     29            'request' => $request_body,
     30        );
    2531
    26     $errorBody = array(
    27       "error"   => "Registration missing required fields",
    28       "request" => $requestBody,
    29     );
     32        wp_die( json_encode( $error_body ), '', 400 );
     33    }
    3034
    31     wp_die( json_encode( $errorBody ), '', 400 );
    32   }
     35    $user_id               = $data['userId'];
     36    $access_token          = $data['accessToken'];
     37    $refresh_token         = $data['refreshToken'];
     38    $connection_time_in_ms = $data['connectionTimeInMs'];
    3339
    34   $userId = $data['userId'];
    35   $accessToken = $data['accessToken'];
    36   $refreshToken = $data['refreshToken'];
    37   $connectionTimeInMs = $data['connectionTimeInMs'];
     40    add_option( 'leadin_portalId', $new_portal_id );
     41    add_option( 'leadin_userId', $user_id );
     42    add_option( 'leadin_accessToken', $access_token );
     43    add_option( 'leadin_refreshToken', $refresh_token );
     44    add_option( 'leadin_connectionTimeInMs', $connection_time_in_ms );
    3845
    39   add_option( 'leadin_portalId', $newPortalId );
    40   add_option( 'leadin_userId', $userId);
    41   add_option( 'leadin_accessToken', $accessToken);
    42   add_option( 'leadin_refreshToken', $refreshToken);
    43   add_option( 'leadin_connectionTimeInMs', $connectionTimeInMs);
    44 
    45   wp_die( '{"message": "Success!"}' );
     46    wp_die( '{"message": "Success!"}' );
    4647}
  • leadin/trunk/inc/leadin-wp-get.php

    r2093795 r2112768  
    11<?php
    22if ( ! defined( 'LEADIN_PLUGIN_VERSION' ) ) {
    3   wp_die( '', '', 403 );
     3    wp_die( '', '', 403 );
    44}
    55
    66if ( is_admin() ) {
    7   add_action( 'wp_ajax_leadin_get_portal', 'leadin_get_portal_ajax' );
    8   add_action( 'wp_ajax_leadin_get_domain', 'leadin_get_domain_ajax' );
     7    add_action( 'wp_ajax_leadin_get_portal', 'leadin_get_portal_ajax' );
     8    add_action( 'wp_ajax_leadin_get_domain', 'leadin_get_domain_ajax' );
    99}
    1010
     11/**
     12 * AJAX handler to get the current connected portal id
     13 */
    1114function leadin_get_portal_ajax() {
    12   $portal_id = get_option( 'leadin_portalId' );
    13   wp_die( json_encode( array ( 'portalId' => $portal_id ) ) );
     15    $portal_id = get_option( 'leadin_portalId' );
     16    wp_die( json_encode( array( 'portalId' => $portal_id ) ) );
    1417}
    1518
     19/**
     20 * AJAX handler to get the domain of the WordPress site
     21 */
    1622function leadin_get_domain_ajax() {
    17   $domain = get_site_url();
    18   wp_die( json_encode( array ( 'domain' => $domain ) ) );
     23    $domain = get_site_url();
     24    wp_die( json_encode( array( 'domain' => $domain ) ) );
    1925}
  • leadin/trunk/js/app.js

    r2106268 r2112768  
    11import Raven, { configureRaven } from './lib/Raven';
    2 import { initChatflows } from './chatflows';
     2import { addExternalLinks } from './menu';
    33import { portalId } from './constants/leadinConfig';
    44import { initInterframe } from './lib/Interframe';
     
    1616  }
    1717
    18   jQuery(document).ready(initChatflows);
     18  jQuery(document).ready(addExternalLinks);
    1919}
    2020
  • leadin/trunk/js/constants/themes.js

    r2106268 r2112768  
    492492      labelTextSize: '18px',
    493493      submitFontColor: '#ffffff',
    494       submitColor: '#0066cc',
    495     },
    496     chatStyle: {
    497       accentColor: '#0066cc',
    498     },
    499     onScrollLeadFlowStyle: {
    500       color: '#0066cc',
    501     },
    502     onExitLeadFlowStyle: {
    503       color: '#0066cc',
     494      submitColor: '#000000',
     495    },
     496    chatStyle: {
     497      accentColor: '#000000',
     498    },
     499    onScrollLeadFlowStyle: {
     500      color: '#000000',
     501    },
     502    onExitLeadFlowStyle: {
     503      color: '#000000',
    504504    },
    505505  },
  • leadin/trunk/leadin.php

    r2106268 r2112768  
    44 * Plugin URI: http://www.hubspot.com/integrations/wordpress
    55 * Description: HubSpot’s official WordPress plugin allows you to add forms, popups, and live chat to your website and integrate with the best WordPress CRM.
    6  * Version: 7.5.2
     6 * Version: 7.5.3
    77 * Author: HubSpot
    88 * Author URI: http://www.hubspot.com
     
    2929// =============================================
    3030if ( ! defined( 'LEADIN_BASE_PATH' ) ) {
    31   define( 'LEADIN_BASE_PATH', __FILE__ );
     31    define( 'LEADIN_BASE_PATH', __FILE__ );
    3232}
    3333
    3434if ( ! defined( 'LEADIN_PATH' ) ) {
    35   define( 'LEADIN_PATH', untrailingslashit( plugins_url( '', LEADIN_BASE_PATH ) ) );
     35    define( 'LEADIN_PATH', untrailingslashit( plugins_url( '', LEADIN_BASE_PATH ) ) );
    3636}
    3737
    3838if ( ! defined( 'LEADIN_PLUGIN_DIR' ) ) {
    39   define( 'LEADIN_PLUGIN_DIR', untrailingslashit( dirname( LEADIN_BASE_PATH ) ) );
     39    define( 'LEADIN_PLUGIN_DIR', untrailingslashit( dirname( LEADIN_BASE_PATH ) ) );
    4040}
    4141
    4242if ( ! defined( 'LEADIN_PLUGIN_SLUG' ) ) {
    43   define( 'LEADIN_PLUGIN_SLUG', basename( dirname( LEADIN_BASE_PATH ) ) );
     43    define( 'LEADIN_PLUGIN_SLUG', basename( dirname( LEADIN_BASE_PATH ) ) );
    4444}
    4545
    4646if ( file_exists( LEADIN_PLUGIN_DIR . '/inc/leadin-overrides.php' ) ) {
    47   require_once LEADIN_PLUGIN_DIR . '/inc/leadin-overrides.php';
     47    require_once LEADIN_PLUGIN_DIR . '/inc/leadin-overrides.php';
    4848}
    4949
    5050if ( ! defined( 'LEADIN_REQUIRED_WP_VERSION' ) ) {
    51   define( 'LEADIN_REQUIRED_WP_VERSION', '4.0' );
     51    define( 'LEADIN_REQUIRED_WP_VERSION', '4.0' );
    5252}
    5353
    5454if ( ! defined( 'LEADIN_REQUIRED_PHP_VERSION' ) ) {
    55   define( 'LEADIN_REQUIRED_PHP_VERSION', '5.6' );
     55    define( 'LEADIN_REQUIRED_PHP_VERSION', '5.6' );
    5656}
    5757
    5858if ( ! defined( 'LEADIN_DB_VERSION' ) ) {
    59   define( 'LEADIN_DB_VERSION', '2.2.5' );
     59    define( 'LEADIN_DB_VERSION', '2.2.5' );
    6060}
    6161
    6262if ( ! defined( 'LEADIN_PLUGIN_VERSION' ) ) {
    63   define( 'LEADIN_PLUGIN_VERSION', '7.5.2' );
     63    define( 'LEADIN_PLUGIN_VERSION', '7.5.3' );
    6464}
    6565
    6666if ( ! defined( 'LEADIN_SOURCE' ) ) {
    67   define( 'LEADIN_SOURCE', 'leadin.com' );
     67    define( 'LEADIN_SOURCE', 'leadin.com' );
    6868}
    6969
    7070if ( ! defined( 'LEADIN_SCRIPT_LOADER_DOMAIN' ) ) {
    71   define( 'LEADIN_SCRIPT_LOADER_DOMAIN', 'js.hs-scripts.com' );
     71    define( 'LEADIN_SCRIPT_LOADER_DOMAIN', 'js.hs-scripts.com' );
    7272}
    7373
    7474if ( ! defined( 'LEADIN_FORMS_SCRIPT_URL' ) ) {
    75   define( 'LEADIN_FORMS_SCRIPT_URL', '//js.hsforms.net/forms/v2.js' );
     75    define( 'LEADIN_FORMS_SCRIPT_URL', '//js.hsforms.net/forms/v2.js' );
    7676}
    7777
    7878if ( ! defined( 'LEADIN_FORMS_PAYLOAD' ) ) {
    79   define( 'LEADIN_FORMS_PAYLOAD', '' );
     79    define( 'LEADIN_FORMS_PAYLOAD', '' );
    8080}
    8181
    8282if ( ! defined( 'LEADIN_ENV' ) ) {
    83   define( 'LEADIN_ENV', 'prod' );
     83    define( 'LEADIN_ENV', 'prod' );
    8484}
    8585
    8686if ( ! defined( 'LEADIN_BASE_URL' ) ) {
    87   define( 'LEADIN_BASE_URL', 'https://app.hubspot.com' );
     87    define( 'LEADIN_BASE_URL', 'https://app.hubspot.com' );
    8888}
    8989
    9090if ( ! defined( 'LEADIN_SIGNUP_BASE_URL' ) ) {
    91   define( 'LEADIN_SIGNUP_BASE_URL', LEADIN_BASE_URL );
     91    define( 'LEADIN_SIGNUP_BASE_URL', LEADIN_BASE_URL );
    9292}
    9393
     
    9696// =============================================
    9797if ( file_exists( LEADIN_PLUGIN_DIR . '/inc/leadin-constants.php' ) ) {
    98   require_once LEADIN_PLUGIN_DIR . '/inc/leadin-constants.php';
     98    require_once LEADIN_PLUGIN_DIR . '/inc/leadin-constants.php';
    9999}
    100100
     
    104104require_once LEADIN_PLUGIN_DIR . '/inc/leadin-wp-get.php';
    105105require_once LEADIN_PLUGIN_DIR . '/inc/leadin-mark-outdated.php';
    106 require_once LEADIN_PLUGIN_DIR . '/admin/leadin-admin.php';
     106require_once LEADIN_PLUGIN_DIR . '/admin/class-leadinadmin.php';
    107107
    108108require_once LEADIN_PLUGIN_DIR . '/inc/class-leadin.php';
     
    114114/**
    115115 * Activate the plugin
    116  */
    117 function activate_leadin( $network_wide ) {
    118 
    119   // Check activation on entire network or one blog
    120   if ( is_multisite() && $network_wide ) {
    121     global $wpdb;
    122 
    123     // Get this so we can switch back to it later
    124     $current_blog = $wpdb->blogid;
    125     // For storing the list of activated blogs
    126     $activated = array();
    127 
    128     // Get all blogs in the network and activate plugin on each one
    129     $blog_ids = $wpdb->get_col(
    130       "SELECT blog_id FROM $wpdb->blogs"
    131     );
    132     foreach ( $blog_ids as $blog_id ) {
    133       switch_to_blog( $blog_id );
    134       add_leadin_defaults();
    135       $activated[] = $blog_id;
    136     }
    137 
    138     // Switch back to the current blog
    139     switch_to_blog( $current_blog );
    140 
    141     // Store the array for a later function
    142     update_site_option( 'leadin_activated', $activated );
    143   } else {
    144     add_leadin_defaults();
    145   }
     116 *
     117 * @param bool $network_wide network_wide.
     118 */
     119function leadin_activate( $network_wide ) {
     120    // Check activation on entire network or one blog.
     121    if ( is_multisite() && $network_wide ) {
     122        global $wpdb;
     123
     124        // Get this so we can switch back to it later.
     125        $current_blog = $wpdb->blogid;
     126        // For storing the list of activated blogs.
     127        $activated = array();
     128
     129        // Get all blogs in the network and activate plugin on each one.
     130        $blog_ids = $wpdb->get_col(
     131            "SELECT blog_id FROM $wpdb->blogs"
     132        );
     133        foreach ( $blog_ids as $blog_id ) {
     134            switch_to_blog( $blog_id );
     135            leadin_add_defaults();
     136            $activated[] = $blog_id;
     137        }
     138
     139        // Switch back to the current blog.
     140        switch_to_blog( $current_blog );
     141
     142        // Store the array for a later function.
     143        update_site_option( 'leadin_activated', $activated );
     144    } else {
     145        leadin_add_defaults();
     146    }
    146147}
    147148
     
    149150 * Check Leadin installation and set options
    150151 */
    151 function add_leadin_defaults() {
    152   global $wpdb;
    153   $options = get_option( 'leadin_options' );
    154 
    155   if ( ( $options['li_installed'] != 1 ) || ( ! is_array( $options ) ) ) {
    156     $opt = array(
    157       'li_installed'            => 1,
    158       'leadin_version'          => LEADIN_PLUGIN_VERSION,
    159       'li_email'                => get_bloginfo( 'admin_email' ),
    160       'li_updates_subscription' => 1,
    161       'onboarding_step'         => 1,
    162       'onboarding_complete'     => 0,
    163       'ignore_settings_popup'   => 0,
    164       'data_recovered'          => 1,
    165       'delete_flags_fixed'      => 1,
    166       'beta_tester'             => 0,
    167       'converted_to_tags'       => 1,
    168       'names_added_to_contacts' => 1,
    169       'affiliate_code'          => '',
    170     );
    171 
    172     // Add the Pro flag if this is a pro installation
    173     if ( ( defined( 'LEADIN_UTM_SOURCE' ) && LEADIN_UTM_SOURCE != 'leadin%20repo%20plugin' ) || ! defined( 'LEADIN_UTM_SOURCE' ) ) {
    174       $opt['pro'] = 1;
    175     }
    176 
    177     // this is a hack because multisite doesn't recognize local options using either update_option or update_site_option...
    178     if ( is_multisite() ) {
    179       $multisite_prefix = ( is_multisite() ? $wpdb->prefix : '' );
    180       $wpdb->query(
    181         $wpdb->prepare(
    182           "
    183                     INSERT INTO %soptions
    184                         ( option_name, option_value )
    185                     VALUES ('leadin_options', %s)",
    186           $multisite_prefix,
    187           serialize( $opt )
    188         )
    189       );
    190       // TODO: Glob settings for multisite
    191     } else {
    192       update_option( 'leadin_options', $opt );
    193     }
    194   }
    195 
    196   setcookie( 'ignore_social_share', '1', 2592000, '/' );
     152function leadin_add_defaults() {
     153    global $wpdb;
     154    $options = get_option( 'leadin_options' );
     155
     156    if ( ( 1 !== $options['li_installed'] ) || ( ! is_array( $options ) ) ) {
     157        $opt = array(
     158            'li_installed'            => 1,
     159            'leadin_version'          => LEADIN_PLUGIN_VERSION,
     160            'li_email'                => get_bloginfo( 'admin_email' ),
     161            'li_updates_subscription' => 1,
     162            'onboarding_step'         => 1,
     163            'onboarding_complete'     => 0,
     164            'ignore_settings_popup'   => 0,
     165            'data_recovered'          => 1,
     166            'delete_flags_fixed'      => 1,
     167            'beta_tester'             => 0,
     168            'converted_to_tags'       => 1,
     169            'names_added_to_contacts' => 1,
     170            'affiliate_code'          => '',
     171        );
     172
     173        // Add the Pro flag if this is a pro installation.
     174        if ( ( defined( 'LEADIN_UTM_SOURCE' ) && 'leadin%20repo%20plugin' !== LEADIN_UTM_SOURCE ) || ! defined( 'LEADIN_UTM_SOURCE' ) ) {
     175            $opt['pro'] = 1;
     176        }
     177
     178        // this is a hack because multisite doesn't recognize local options using either update_option or update_site_option...
     179        if ( is_multisite() ) {
     180            $multisite_prefix = ( is_multisite() ? $wpdb->prefix : '' );
     181            $wpdb->query(
     182                $wpdb->prepare(
     183                    "INSERT INTO %soptions ( option_name, option_value ) VALUES ('leadin_options', %s)",
     184                    $multisite_prefix,
     185                    serialize( $opt )
     186                )
     187            );
     188            // TODO: Glob settings for multisite.
     189        } else {
     190            update_option( 'leadin_options', $opt );
     191        }
     192    }
     193
     194    setcookie( 'ignore_social_share', '1', 2592000, '/' );
    197195}
    198196
    199197/**
    200198 * Deactivate Leadin plugin hook
    201  */
    202 function deactivate_leadin( $network_wide ) {
    203   if ( is_multisite() && $network_wide ) {
    204     global $wpdb;
    205 
    206     // Get this so we can switch back to it later
    207     $current_blog = $wpdb->blogid;
    208 
    209     // Get all blogs in the network and activate plugin on each one
    210     $blog_ids = $wpdb->get_col(
    211       "SELECT blog_id FROM $wpdb->blogs"
    212     );
    213     foreach ( $blog_ids as $blog_id ) {
    214       switch_to_blog( $blog_id );
    215     }
    216 
    217     // Switch back to the current blog
    218     switch_to_blog( $current_blog );
    219   }
    220 }
    221 
    222 function activate_leadin_on_new_blog( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
    223   global $wpdb;
    224 
    225   if ( is_plugin_active_for_network( 'leadin/leadin.php' ) ) {
    226     $current_blog = $wpdb->blogid;
    227     switch_to_blog( $blog_id );
    228     add_leadin_defaults();
    229     switch_to_blog( $current_blog );
    230   }
    231 }
    232 
    233 
    234 //=============================================
    235 // Shortcodes
    236 //=============================================
    237 function addHubspotShortcode($attributes) {
    238     $parsedAttributes = shortcode_atts(array(
    239         'type' => NULL,
    240         'portal' => NULL,
    241         'id' => NULL,
    242     ), $attributes);
    243 
    244     if (
    245         !isset($parsedAttributes['type']) ||
    246         !isset($parsedAttributes['portal']) ||
    247         !isset($parsedAttributes['id'])
    248     ) {
    249         return;
    250     }
    251 
    252     $portalId = $parsedAttributes['portal'];
    253     $id = $parsedAttributes['id'];
    254 
    255     switch ($parsedAttributes['type']) {
    256         case 'form':
    257             return '
    258                 <script charset="utf-8" type="text/javascript" src="'.LEADIN_FORMS_SCRIPT_URL.'"></script>
    259                 <script>
    260                   hbspt.forms.create({
    261                     portalId: '. $portalId . ',
    262                     formId: "' . $id . '",
    263                     shortcode: "wp",
    264                     ' . LEADIN_FORMS_PAYLOAD . '
    265                   });
    266                 </script>
    267             ';
    268         case 'cta':
    269             return '
    270                 <!--HubSpot Call-to-Action Code -->
    271                 <span class="hs-cta-wrapper" id="hs-cta-wrapper-' . $id . '">
    272                     <span class="hs-cta-node hs-cta-' . $id . '" id="'. $id . '">
    273                         <!--[if lte IE 8]>
    274                         <div id="hs-cta-ie-element"></div>
    275                         <![endif]-->
    276                         <a href="https://cta-redirect.hubspot.com/cta/redirect/' . $portalId . '/'. $id . '" >
    277                             <img class="hs-cta-img" id="hs-cta-img-' . $id . '" style="border-width:0px;" src="https://no-cache.hubspot.com/cta/default/' . $portalId . '/' . $id . '.png"  alt="New call-to-action"/>
    278                         </a>
    279                     </span>
    280                     <script charset="utf-8" src="//js.hubspot.com/cta/current.js"></script>
    281                     <script type="text/javascript">
    282                         hbspt.cta.load(' . $portalId . ', \''. $id . '\', {});
    283                     </script>
    284                 </span>
    285                 <!-- end HubSpot Call-to-Action Code -->
    286             ';
    287     }
     199 *
     200 * @param bool $network_wide network_wide.
     201 */
     202function leadin_deactivate( $network_wide ) {
     203    if ( is_multisite() && $network_wide ) {
     204        global $wpdb;
     205
     206        // Get this so we can switch back to it later.
     207        $current_blog = $wpdb->blogid;
     208
     209        // Get all blogs in the network and activate plugin on each one.
     210        $blog_ids = $wpdb->get_col(
     211            "SELECT blog_id FROM $wpdb->blogs"
     212        );
     213        foreach ( $blog_ids as $blog_id ) {
     214            switch_to_blog( $blog_id );
     215        }
     216
     217        // Switch back to the current blog.
     218        switch_to_blog( $current_blog );
     219    }
     220}
     221
     222/**
     223 * Handler for wpmu_new_blog
     224 *
     225 * @param any $blog_id read wpmu_new_blog doc.
     226 * @param any $user_id read wpmu_new_blog doc.
     227 * @param any $domain read wpmu_new_blog doc.
     228 * @param any $path read wpmu_new_blog doc.
     229 * @param any $site_id read wpmu_new_blog doc.
     230 * @param any $meta read wpmu_new_blog doc.
     231 */
     232function leadin_activate_on_new_blog( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
     233    global $wpdb;
     234
     235    if ( is_plugin_active_for_network( 'leadin/leadin.php' ) ) {
     236        $current_blog = $wpdb->blogid;
     237        switch_to_blog( $blog_id );
     238        leadin_add_defaults();
     239        switch_to_blog( $current_blog );
     240    }
     241}
     242
     243/**
     244 * Parse shortcode
     245 *
     246 * @param array $attributes Shortcode attributes.
     247 */
     248function leadin_add_hubspot_shortcode( $attributes ) {
     249    $parsed_attributes = shortcode_atts(
     250        array(
     251            'type'   => null,
     252            'portal' => null,
     253            'id'     => null,
     254        ),
     255        $attributes
     256    );
     257
     258    if (
     259        ! isset( $parsed_attributes['type'] ) ||
     260        ! isset( $parsed_attributes['portal'] ) ||
     261        ! isset( $parsed_attributes['id'] )
     262    ) {
     263        return;
     264    }
     265
     266    $portal_id = $parsed_attributes['portal'];
     267    $id        = $parsed_attributes['id'];
     268
     269    switch ( $parsed_attributes['type'] ) {
     270        case 'form':
     271            return '
     272                <' . 'script charset="utf-8" type="text/javascript" src="' . LEADIN_FORMS_SCRIPT_URL . '"></script>
     273                <script>
     274                    hbspt.forms.create({
     275                        portalId: ' . $portal_id . ',
     276                        formId: "' . $id . '",
     277                        shortcode: "wp",
     278                        ' . LEADIN_FORMS_PAYLOAD . '
     279                    });
     280                </script>
     281            ';
     282        case 'cta':
     283            return '
     284                <!--HubSpot Call-to-Action Code -->
     285                <span class="hs-cta-wrapper" id="hs-cta-wrapper-' . $id . '">
     286                        <span class="hs-cta-node hs-cta-' . $id . '" id="' . $id . '">
     287                                <!--[if lte IE 8]>
     288                                <div id="hs-cta-ie-element"></div>
     289                                <![endif]-->
     290                                <a href="https://cta-redirect.hubspot.com/cta/redirect/' . $portal_id . '/' . $id . '" >
     291                                        <img class="hs-cta-img" id="hs-cta-img-' . $id . '" style="border-width:0px;" src="https://no-cache.hubspot.com/cta/default/' . $portal_id . '/' . $id . '.png"  alt="New call-to-action"/>
     292                                </a>
     293                        </span>
     294                        <' . 'script charset="utf-8" src="//js.hubspot.com/cta/current.js"></script>
     295                        <script type="text/javascript">
     296                                hbspt.cta.load(' . $portal_id . ', \'' . $id . '\', {});
     297                        </script>
     298                </span>
     299                <!-- end HubSpot Call-to-Action Code -->
     300            ';
     301    }
    288302}
    289303
     
    291305 * Checks the stored database version against the current data version + updates if needed
    292306 */
    293 function leadin_init()
    294 {
    295     load_plugin_textdomain( 'leadin', false, '/leadin/languages' );
    296     $leadin_wp = new WPLeadIn();
    297     add_shortcode('hubspot', 'addHubspotShortcode');
    298 }
    299 
     307function leadin_init() {
     308        load_plugin_textdomain( 'leadin', false, '/leadin/languages' );
     309        $leadin_wp = new Leadin();
     310        add_shortcode( 'hubspot', 'leadin_add_hubspot_shortcode' );
     311}
    300312
    301313add_action( 'plugins_loaded', 'leadin_init', 14 );
    302314
    303315if ( is_admin() ) {
    304   // Activate + install Leadin
    305   register_activation_hook( __FILE__, 'activate_leadin' );
    306 
    307   // Deactivate Leadin
    308   register_deactivation_hook( __FILE__, 'deactivate_leadin' );
    309 
    310   // Activate on newly created wpmu blog
    311   add_action( 'wpmu_new_blog', 'activate_leadin_on_new_blog', 10, 6 );
    312 }
    313 
    314 
     316    // Activate + install Leadin.
     317    register_activation_hook( __FILE__, 'leadin_activate' );
     318
     319    // Deactivate Leadin.
     320    register_deactivation_hook( __FILE__, 'leadin_deactivate' );
     321
     322    // Activate on newly created wpmu blog.
     323    add_action( 'wpmu_new_blog', 'leadin_activate_on_new_blog', 10, 6 );
     324}
     325
     326
  • leadin/trunk/readme.txt

    r2106268 r2112768  
    33License: GPLv3
    44License URI: http://www.gnu.org/licenses/gpl.html
    5 Tags: forms, popup, live chat, contact form, crm, newsletter, marketing, lead generation, hubspot, mailchimp, constant contact
     5Tags: hubspot, crm, forms, popup, live chat, email, contact form, newsletter, marketing, lead generation, mailchimp, constant contact
    66Requires at least: 4.0
    77Tested up to: 5.2
    88Requires PHP: 5.6
    9 Stable tag: 7.5.2
     9Stable tag: 7.5.3
    1010
    11 HubSpot All-In-One Marketing, is a free all-in-one marketing plugin that allows you to easily use HubSpot forms, popups, and live chat on your WordPress site. If you’re already a HubSpot user, the plugin lets you connect your HubSpot account to your website without any code.
     11HubSpot All-In-One Marketing, is a free all-in-one marketing plugin that allows you to easily use HubSpot forms, popups, and live chat on your WordPress site and create and send email campaigns. If you’re already a HubSpot user, the plugin lets you connect your HubSpot account to your website without any code.
    1212
    1313== Description ==
    1414
    15 *HubSpot All-In-One Marketing is the ultimate free marketing plugin for WordPress if you want to grow your email list, generate leads, and manage all your contacts inside HubSpot’s free CRM.*
     15*HubSpot All-In-One Marketing is the ultimate free plugin for WordPress if you want to grow your email list, manage your contacts, and send marketing emails all through HubSpot’s free CRM.*
    1616
    17 The free plugin includes lead capture tools like forms, popups, live chat, and an integrated free contact database (CRM). All these features work immediately with no developer help needed.
     17The free plugin includes lead capture tools like forms, popups, live chat, and an integrated free contact database (CRM). Once you grow your email list you can also send email campaigns and manage your digital ads through HubSpot. All these features work immediately with no developer help needed.
    1818
    1919HubSpot All-In-One Marketing automatically captures form submissions from your site and adds them to the fully integrated WordPress CRM, even if they come from a different tool.
     
    3636*Live Chat & Chatbots: Let your site visitors talk to you*
    3737
    38 HubSpot allows you to embed a <a href="https://www.hubspot.com/products/crm/live-chat?utm_source=wordpress-plugin-listing&utm_campaign=wordpress&utm_medium=marketplaces" target="_blank">free live chat</a> module to your website your website and let site visitors chat with you. Using the plugin, you can set up the following WordPress live chat modules:
     38HubSpot allows you to embed a <a href="https://www.hubspot.com/products/crm/live-chat?utm_source=wordpress-plugin-listing&utm_campaign=wordpress&utm_medium=marketplaces" target="_blank">free live chat</a> module to your website and let site visitors chat with you. Using the plugin, you can set up the following WordPress live chat modules:
    3939
    40 Support live chat: Answer questions your customers might have about your business through live chat
    41 Sales live chat: Help answer questions your potential customers might have through live chat
    42 Automated chatbot: Set up an automated chatbot to respond to your website visitors when you aren’t online to respond to live chat messages
     40- Support live chat: Answer questions your customers might have about your business through live chat
     41- Sales live chat: Help answer questions your potential customers might have through live chat
     42- Automated chatbot: Set up an automated chatbot to respond to your website visitors when you aren’t online to respond to live chat messages
     43
     44*Email Marketing*
     45
     46Send marketing emails to your contacts. Select an email design from our template library and use our drag and drop email editor to craft and send the perfect email. Then analyze your email performance to see how each contact interacted with your email.
    4347
    4448*Simple Email Automation*
    4549
    46 Send an automated email when someone fills out a form, submits a popup form, or sends a message on live chat. Automate emails are helpful for engaging with your subscribers and customers at the time that matters most: when they’re engaging with you. All emails you send including open and click rates, will be automatically logged in the integrated WordPress CRM so you can see exactly who opens and clicks your emails.
    47 
     50Send an automated email when someone fills out a form, submits a popup form, or sends a message on live chat. Automated emails are helpful for engaging with your subscribers and customers at the time that matters most: when they’re engaging with you. All emails you send including open and click rates, will be automatically logged in the integrated WordPress CRM so you can see exactly who opens and clicks your emails.
    4851
    4952*Fully Integrated Customer Relationship Management*
     
    6164- <a href="https://www.hubspot.com/products/marketing/lead-flows?utm_source=wordpress-plugin-listing&utm_campaign=wordpress&utm_medium=marketplaces" target="_blank">Popups</a>: Add a user-friendly popup form to your WordPress website with ease using HubSpot’s form builder.
    6265- <a href="https://www.hubspot.com/products/crm/live-chat?utm_source=wordpress-plugin-listing&utm_campaign=wordpress&utm_medium=marketplaces" target="_blank">Live Chat</a>: Add a live chat widget to your WordPress site so visitors can chat with you.
     66- <a href="https://www.hubspot.com/products/marketing/email?utm_source=wordpress-plugin-listing&utm_campaign=wordpress&utm_medium=marketplaces" target="_blank">Email Marketing</a>: Use the drag and drop editor to design and send email campaigns.
    6367- Simple Email Automation: Send an automated email whenever someone fills out a form or popup or sends a message on live chat.
    6468- <a href="https://www.hubspot.com/products/crm?utm_source=wordpress-plugin-listing&utm_campaign=wordpress&utm_medium=marketplaces" target="_blank">WordPress CRM</a>: A single simple database for contact management.
     
    6670
    6771*What do people have to say about HubSpot All-In-One Marketing - Forms, Popups, Live Chat?*
     72
     73> "I have been in sales and marketing for over 12 years and literally have NEVER liked one of the contact management tools that I have used... and then HubSpot came along and waved their magic sales wand and made a contact management tool that is actually sales-minded, works great, and integrates seamlessly with WordPress." - Caylin White, Head Marketing Buff, WP Buffs
    6874
    6975> “HubSpot educates marketers beyond just the anonymous analytics they get from Google Analytics. Instead, it digs down to individual users.” – Michael Shoup, Founder / CEO, 12South Marketing
     
    111117= What does the plugin do? =
    112118
    113 HubSpot All-In-One Marketing allows you to use HubSpot forms, popups, and live chat on your WordPress website. This all-in-one marketing plugin gives you all the tools you need to grow your email list.
     119HubSpot All-In-One Marketing allows you to use HubSpot forms, popups, and live chat on your WordPress website. This all-in-one marketing plugin gives you all the tools you need to grow your email list and send email campaigns.
    114120
    115121= What is HubSpot? =
    116122
    117 <a href="https://hubspot.com?utm_source=wordpress-plugin-listing&utm_campaign=wordpress&utm_medium=marketplaces" target="_blank">HubSpot</a>a> provides a suite of marketing, sales, customer service, and CRM products to help you grow your business including.
     123<a href="https://hubspot.com?utm_source=wordpress-plugin-listing&utm_campaign=wordpress&utm_medium=marketplaces" target="_blank">HubSpot</a> provides a suite of marketing, sales, customer service, and CRM products to help you grow your business including.
    118124
    119125= Who should use HubSpot All-In-One Marketing? =
     
    150156<a href="https://knowledge.hubspot.com/getting-started-with-the-hubspot-crm-free/lead-flows-and-collected-forms-faq?utm_source=wordpress-plugin-listing&utm_campaign=wordpress&utm_medium=marketplaces" target="_blank">Check out this help article</a> for more details.
    151157
     158**What is available in the free email marketing tool?**
     159HubSpot’s free email marketing tool offers 2000 email sends per calendar month, with HubSpot branding.
     160
    152161= My question is not listed. =
    153162
     
    165174== Changelog ==
    166175
    167 - Current version: 7.5.2
    168 - Current version release: 2019-06-14
     176- Current version: 7.5.3
     177- Current version release: 2019-06-26
    169178
    170 = 7.5.2 (2019.06.14) =
    171 - Add webpack and use ES6
    172 - Show "complete your signup" banner for WPEngine themes
    173 - Auto-generate assets and update styles for WPEngine themes
    174 - Handle messages timeout errors
    175 - Fix navigation in single page app
    176 - Enable non-HubSpot forms by default
    177 - Add forms tab in settings
    178 - Add form builder to WordPress
     179= 7.5.3 (2019.06.26) =
     180- Rename "chatflow" to "live chat"
     181- Update readme.txt
     182- Update banners
     183- Fix themes colors
     184- Refactor code style
    179185
    180186= 7.5.0 (2019.05.22) =
  • leadin/trunk/scripts/leadin.js

    r2106268 r2112768  
    1 !function(e){var t={};function o(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=8)}([function(e,t,o){(function(t){var r=o(3),n="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{},a=n.Raven,l=new r;l.noConflict=function(){return n.Raven=a,l},l.afterLoad(),e.exports=l}).call(this,o(1))},function(e,t){var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(e){"object"==typeof window&&(o=window)}e.exports=o},function(e,t,o){(function(t){var o="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{};function r(e){return void 0===e}function n(e){return"[object String]"===Object.prototype.toString.call(e)}function a(){try{return new ErrorEvent(""),!0}catch(e){return!1}}function l(e,t){var o,n;if(r(e.length))for(o in e)i(e,o)&&t.call(null,o,e[o]);else if(n=e.length)for(o=0;o<n;o++)t.call(null,o,e[o])}function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function s(e){var t,o,r,a,l,i=[];if(!e||!e.tagName)return"";if(i.push(e.tagName.toLowerCase()),e.id&&i.push("#"+e.id),(t=e.className)&&n(t))for(o=t.split(/\s+/),l=0;l<o.length;l++)i.push("."+o[l]);var s=["type","name","title","alt"];for(l=0;l<s.length;l++)r=s[l],(a=e.getAttribute(r))&&i.push("["+r+'="'+a+'"]');return i.join("")}function c(e,t){return!!(!!e^!!t)}function u(e,t){if(c(e,t))return!1;var o,r,n=e.frames,a=t.frames;if(n.length!==a.length)return!1;for(var l=0;l<n.length;l++)if(o=n[l],r=a[l],o.filename!==r.filename||o.lineno!==r.lineno||o.colno!==r.colno||o.function!==r.function)return!1;return!0}e.exports={isObject:function(e){return"object"==typeof e&&null!==e},isError:function(e){switch({}.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},isErrorEvent:function(e){return a()&&"[object ErrorEvent]"==={}.toString.call(e)},isUndefined:r,isFunction:function(e){return"function"==typeof e},isString:n,isEmptyObject:function(e){for(var t in e)return!1;return!0},supportsErrorEvent:a,wrappedCallback:function(e){return function(t,o){var r=e(t)||t;return o&&o(r)||r}},each:l,objectMerge:function(e,t){return t?(l(t,function(t,o){e[t]=o}),e):e},truncate:function(e,t){return!t||e.length<=t?e:e.substr(0,t)+"…"},objectFrozen:function(e){return!!Object.isFrozen&&Object.isFrozen(e)},hasKey:i,joinRegExp:function(e){for(var t,o=[],r=0,a=e.length;r<a;r++)n(t=e[r])?o.push(t.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")):t&&t.source&&o.push(t.source);return new RegExp(o.join("|"),"i")},urlencode:function(e){var t=[];return l(e,function(e,o){t.push(encodeURIComponent(e)+"="+encodeURIComponent(o))}),t.join("&")},uuid4:function(){var e=o.crypto||o.msCrypto;if(!r(e)&&e.getRandomValues){var t=new Uint16Array(8);e.getRandomValues(t),t[3]=4095&t[3]|16384,t[4]=16383&t[4]|32768;var n=function(e){for(var t=e.toString(16);t.length<4;)t="0"+t;return t};return n(t[0])+n(t[1])+n(t[2])+n(t[3])+n(t[4])+n(t[5])+n(t[6])+n(t[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})},htmlTreeAsString:function(e){for(var t,o=[],r=0,n=0,a=" > ".length;e&&r++<5&&!("html"===(t=s(e))||r>1&&n+o.length*a+t.length>=80);)o.push(t),n+=t.length,e=e.parentNode;return o.reverse().join(" > ")},htmlElementAsString:s,isSameException:function(e,t){return!c(e,t)&&(e=e.values[0],t=t.values[0],e.type===t.type&&e.value===t.value&&u(e.stacktrace,t.stacktrace))},isSameStacktrace:u,parseUrl:function(e){var t=e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!t)return{};var o=t[6]||"",r=t[8]||"";return{protocol:t[2],host:t[4],path:t[5],relative:t[5]+o+r}},fill:function(e,t,o,r){var n=e[t];e[t]=o(n),r&&r.push([e,t,n])}}}).call(this,o(1))},function(e,t,o){(function(t){var r=o(4),n=o(5),a=o(6),l=o(2),i=l.isError,s=l.isObject,c=(s=l.isObject,l.isErrorEvent),u=l.isUndefined,f=l.isFunction,p=l.isString,d=l.isEmptyObject,h=l.each,b=l.objectMerge,m=l.truncate,y=l.objectFrozen,g=l.hasKey,v=l.joinRegExp,_=l.urlencode,S=l.uuid4,x=l.htmlTreeAsString,C=l.isSameException,w=l.isSameStacktrace,E=l.parseUrl,F=l.fill,T=o(7).wrapMethod,k="source protocol user pass host port path".split(" "),L=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function O(){return+new Date}var j="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{},R=j.document,I=j.navigator;function B(e,t){return f(t)?function(o){return t(o,e)}:t}function M(){for(var e in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!u(R),this._hasNavigator=!u(I),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],collectWindowErrors:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=j.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=O(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=j.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[e]=this._originalConsole[e]}M.prototype={VERSION:"3.19.1",debug:!1,TraceKit:r,config:function(e,t){var o=this;if(o._globalServer)return this._logDebug("error","Error: Raven has already been configured"),o;if(!e)return o;var n=o._globalOptions;t&&h(t,function(e,t){"tags"===e||"extra"===e||"user"===e?o._globalContext[e]=t:n[e]=t}),o.setDSN(e),n.ignoreErrors.push(/^Script error\.?$/),n.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),n.ignoreErrors=v(n.ignoreErrors),n.ignoreUrls=!!n.ignoreUrls.length&&v(n.ignoreUrls),n.whitelistUrls=!!n.whitelistUrls.length&&v(n.whitelistUrls),n.includePaths=v(n.includePaths),n.maxBreadcrumbs=Math.max(0,Math.min(n.maxBreadcrumbs||100,100));var a={xhr:!0,console:!0,dom:!0,location:!0},l=n.autoBreadcrumbs;"[object Object]"==={}.toString.call(l)?l=b(a,l):!1!==l&&(l=a),n.autoBreadcrumbs=l;var i={tryCatch:!0},s=n.instrument;return"[object Object]"==={}.toString.call(s)?s=b(i,s):!1!==s&&(s=i),n.instrument=s,r.collectWindowErrors=!!n.collectWindowErrors,o},install:function(){var e=this;return e.isSetup()&&!e._isRavenInstalled&&(r.report.subscribe(function(){e._handleOnErrorStackInfo.apply(e,arguments)}),e._globalOptions.instrument&&e._globalOptions.instrument.tryCatch&&e._instrumentTryCatch(),e._globalOptions.autoBreadcrumbs&&e._instrumentBreadcrumbs(),e._drainPlugins(),e._isRavenInstalled=!0),Error.stackTraceLimit=e._globalOptions.stackTraceLimit,this},setDSN:function(e){var t=this._parseDSN(e),o=t.path.lastIndexOf("/"),r=t.path.substr(1,o);this._dsn=e,this._globalKey=t.user,this._globalSecret=t.pass&&t.pass.substr(1),this._globalProject=t.path.substr(o+1),this._globalServer=this._getGlobalServer(t),this._globalEndpoint=this._globalServer+"/"+r+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(e,t,o){return f(e)&&(o=t||[],t=e,e=void 0),this.wrap(e,t).apply(this,o)},wrap:function(e,t,o){var r=this;if(u(t)&&!f(e))return e;if(f(e)&&(t=e,e=void 0),!f(t))return t;try{if(t.__raven__)return t;if(t.__raven_wrapper__)return t.__raven_wrapper__}catch(e){return t}function n(){var n=[],a=arguments.length,l=!e||e&&!1!==e.deep;for(o&&f(o)&&o.apply(this,arguments);a--;)n[a]=l?r.wrap(e,arguments[a]):arguments[a];try{return t.apply(this,n)}catch(t){throw r._ignoreNextOnError(),r.captureException(t,e),t}}for(var a in t)g(t,a)&&(n[a]=t[a]);return n.prototype=t.prototype,t.__raven_wrapper__=n,n.__raven__=!0,n.__inner__=t,n},uninstall:function(){return r.report.uninstall(),this._restoreBuiltIns(),Error.stackTraceLimit=this._originalErrorStackTraceLimit,this._isRavenInstalled=!1,this},captureException:function(e,t){var o=!i(e),n=!c(e),a=c(e)&&!e.error;if(o&&n||a)return this.captureMessage(e,b({trimHeadFrames:1,stacktrace:!0},t));c(e)&&(e=e.error),this._lastCapturedException=e;try{var l=r.computeStackTrace(e);this._handleStackInfo(l,t)}catch(t){if(e!==t)throw t}return this},captureMessage:function(e,t){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)){var o,n=b({message:e+""},t=t||{});try{throw new Error(e)}catch(e){o=e}o.name=null;var a=r.computeStackTrace(o),l=a.stack[1],i=l&&l.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(i))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(i))){if(this._globalOptions.stacktrace||t&&t.stacktrace){t=b({fingerprint:e,trimHeadFrames:(t.trimHeadFrames||0)+1},t);var s=this._prepareFrames(a,t);n.stacktrace={frames:s.reverse()}}return this._send(n),this}}},captureBreadcrumb:function(e){var t=b({timestamp:O()/1e3},e);if(f(this._globalOptions.breadcrumbCallback)){var o=this._globalOptions.breadcrumbCallback(t);if(s(o)&&!d(o))t=o;else if(!1===o)return this}return this._breadcrumbs.push(t),this._breadcrumbs.length>this._globalOptions.maxBreadcrumbs&&this._breadcrumbs.shift(),this},addPlugin:function(e){var t=[].slice.call(arguments,1);return this._plugins.push([e,t]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(e){return this._globalContext.user=e,this},setExtraContext:function(e){return this._mergeContext("extra",e),this},setTagsContext:function(e){return this._mergeContext("tags",e),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(n(this._globalContext))},setEnvironment:function(e){return this._globalOptions.environment=e,this},setRelease:function(e){return this._globalOptions.release=e,this},setDataCallback:function(e){var t=this._globalOptions.dataCallback;return this._globalOptions.dataCallback=B(t,e),this},setBreadcrumbCallback:function(e){var t=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=B(t,e),this},setShouldSendCallback:function(e){var t=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=B(t,e),this},setTransport:function(e){return this._globalOptions.transport=e,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return!!this._hasJSON&&(!!this._globalServer||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this._logDebug("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var e=j.RavenConfig;e&&this.config(e.dsn,e.config).install()},showReportDialog:function(e){if(R){var t=(e=e||{}).eventId||this.lastEventId();if(!t)throw new a("Missing eventId");var o=e.dsn||this._dsn;if(!o)throw new a("Missing DSN");var r=encodeURIComponent,n="";n+="?eventId="+r(t),n+="&dsn="+r(o);var l=e.user||this._globalContext.user;l&&(l.name&&(n+="&name="+r(l.name)),l.email&&(n+="&email="+r(l.email)));var i=this._getGlobalServer(this._parseDSN(o)),s=R.createElement("script");s.async=!0,s.src=i+"/api/embed/error-page/"+n,(R.head||R.body).appendChild(s)}},_ignoreNextOnError:function(){var e=this;this._ignoreOnError+=1,setTimeout(function(){e._ignoreOnError-=1})},_triggerEvent:function(e,t){var o,r;if(this._hasDocument){for(r in t=t||{},e="raven"+e.substr(0,1).toUpperCase()+e.substr(1),R.createEvent?(o=R.createEvent("HTMLEvents")).initEvent(e,!0,!0):(o=R.createEventObject()).eventType=e,t)g(t,r)&&(o[r]=t[r]);if(R.createEvent)R.dispatchEvent(o);else try{R.fireEvent("on"+o.eventType.toLowerCase(),o)}catch(e){}}},_breadcrumbEventHandler:function(e){var t=this;return function(o){if(t._keypressTimeout=null,t._lastCapturedEvent!==o){var r;t._lastCapturedEvent=o;try{r=x(o.target)}catch(e){r="<unknown>"}t.captureBreadcrumb({category:"ui."+e,message:r})}}},_keypressEventHandler:function(){var e=this;return function(t){var o;try{o=t.target}catch(e){return}var r=o&&o.tagName;if(r&&("INPUT"===r||"TEXTAREA"===r||o.isContentEditable)){var n=e._keypressTimeout;n||e._breadcrumbEventHandler("input")(t),clearTimeout(n),e._keypressTimeout=setTimeout(function(){e._keypressTimeout=null},1e3)}}},_captureUrlChange:function(e,t){var o=E(this._location.href),r=E(t),n=E(e);this._lastHref=t,o.protocol===r.protocol&&o.host===r.host&&(t=r.relative),o.protocol===n.protocol&&o.host===n.host&&(e=n.relative),this.captureBreadcrumb({category:"navigation",data:{to:t,from:e}})},_instrumentTryCatch:function(){var e=this,t=e._wrappedBuiltIns;function o(t){return function(o,r){for(var n=new Array(arguments.length),a=0;a<n.length;++a)n[a]=arguments[a];var l=n[0];return f(l)&&(n[0]=e.wrap(l)),t.apply?t.apply(this,n):t(n[0],n[1])}}var r=this._globalOptions.autoBreadcrumbs;function n(o){var n=j[o]&&j[o].prototype;n&&n.hasOwnProperty&&n.hasOwnProperty("addEventListener")&&(F(n,"addEventListener",function(t){return function(n,a,l,i){try{a&&a.handleEvent&&(a.handleEvent=e.wrap(a.handleEvent))}catch(e){}var s,c,u;return r&&r.dom&&("EventTarget"===o||"Node"===o)&&(c=e._breadcrumbEventHandler("click"),u=e._keypressEventHandler(),s=function(e){if(e){var t;try{t=e.type}catch(e){return}return"click"===t?c(e):"keypress"===t?u(e):void 0}}),t.call(this,n,e.wrap(a,void 0,s),l,i)}},t),F(n,"removeEventListener",function(e){return function(t,o,r,n){try{o=o&&(o.__raven_wrapper__?o.__raven_wrapper__:o)}catch(e){}return e.call(this,t,o,r,n)}},t))}F(j,"setTimeout",o,t),F(j,"setInterval",o,t),j.requestAnimationFrame&&F(j,"requestAnimationFrame",function(t){return function(o){return t(e.wrap(o))}},t);for(var a=["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"],l=0;l<a.length;l++)n(a[l])},_instrumentBreadcrumbs:function(){var e=this,t=this._globalOptions.autoBreadcrumbs,o=e._wrappedBuiltIns;function r(t,o){t in o&&f(o[t])&&F(o,t,function(t){return e.wrap(t)})}if(t.xhr&&"XMLHttpRequest"in j){var n=XMLHttpRequest.prototype;F(n,"open",function(t){return function(o,r){return p(r)&&-1===r.indexOf(e._globalKey)&&(this.__raven_xhr={method:o,url:r,status_code:null}),t.apply(this,arguments)}},o),F(n,"send",function(t){return function(o){var n=this;function a(){if(n.__raven_xhr&&4===n.readyState){try{n.__raven_xhr.status_code=n.status}catch(e){}e.captureBreadcrumb({type:"http",category:"xhr",data:n.__raven_xhr})}}for(var l=["onload","onerror","onprogress"],i=0;i<l.length;i++)r(l[i],n);return"onreadystatechange"in n&&f(n.onreadystatechange)?F(n,"onreadystatechange",function(t){return e.wrap(t,void 0,a)}):n.onreadystatechange=a,t.apply(this,arguments)}},o)}t.xhr&&"fetch"in j&&F(j,"fetch",function(t){return function(o,r){for(var n=new Array(arguments.length),a=0;a<n.length;++a)n[a]=arguments[a];var l,i=n[0],s="GET";"string"==typeof i?l=i:"Request"in j&&i instanceof j.Request?(l=i.url,i.method&&(s=i.method)):l=""+i,n[1]&&n[1].method&&(s=n[1].method);var c={method:s,url:l,status_code:null};return e.captureBreadcrumb({type:"http",category:"fetch",data:c}),t.apply(this,n).then(function(e){return c.status_code=e.status,e})}},o),t.dom&&this._hasDocument&&(R.addEventListener?(R.addEventListener("click",e._breadcrumbEventHandler("click"),!1),R.addEventListener("keypress",e._keypressEventHandler(),!1)):(R.attachEvent("onclick",e._breadcrumbEventHandler("click")),R.attachEvent("onkeypress",e._keypressEventHandler())));var a=j.chrome,l=!(a&&a.app&&a.app.runtime)&&j.history&&history.pushState&&history.replaceState;if(t.location&&l){var i=j.onpopstate;j.onpopstate=function(){var t=e._location.href;if(e._captureUrlChange(e._lastHref,t),i)return i.apply(this,arguments)};var s=function(t){return function(){var o=arguments.length>2?arguments[2]:void 0;return o&&e._captureUrlChange(e._lastHref,o+""),t.apply(this,arguments)}};F(history,"pushState",s,o),F(history,"replaceState",s,o)}if(t.console&&"console"in j&&console.log){var c=function(t,o){e.captureBreadcrumb({message:t,level:o.level,category:"console"})};h(["debug","info","warn","error","log"],function(e,t){T(console,t,c)})}},_restoreBuiltIns:function(){for(var e;this._wrappedBuiltIns.length;){var t=(e=this._wrappedBuiltIns.shift())[0],o=e[1],r=e[2];t[o]=r}},_drainPlugins:function(){var e=this;h(this._plugins,function(t,o){var r=o[0],n=o[1];r.apply(e,[e].concat(n))})},_parseDSN:function(e){var t=L.exec(e),o={},r=7;try{for(;r--;)o[k[r]]=t[r]||""}catch(t){throw new a("Invalid DSN: "+e)}if(o.pass&&!this._globalOptions.allowSecretKey)throw new a("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return o},_getGlobalServer:function(e){var t="//"+e.host+(e.port?":"+e.port:"");return e.protocol&&(t=e.protocol+":"+t),t},_handleOnErrorStackInfo:function(){this._ignoreOnError||this._handleStackInfo.apply(this,arguments)},_handleStackInfo:function(e,t){var o=this._prepareFrames(e,t);this._triggerEvent("handle",{stackInfo:e,options:t}),this._processException(e.name,e.message,e.url,e.lineno,o,t)},_prepareFrames:function(e,t){var o=this,r=[];if(e.stack&&e.stack.length&&(h(e.stack,function(t,n){var a=o._normalizeFrame(n,e.url);a&&r.push(a)}),t&&t.trimHeadFrames))for(var n=0;n<t.trimHeadFrames&&n<r.length;n++)r[n].in_app=!1;return r=r.slice(0,this._globalOptions.stackTraceLimit)},_normalizeFrame:function(e,t){var o={filename:e.url,lineno:e.line,colno:e.column,function:e.func||"?"};return e.url||(o.filename=t),o.in_app=!(this._globalOptions.includePaths.test&&!this._globalOptions.includePaths.test(o.filename)||/(Raven|TraceKit)\./.test(o.function)||/raven\.(min\.)?js$/.test(o.filename)),o},_processException:function(e,t,o,r,n,a){var l,i=(e?e+": ":"")+(t||"");if((!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(t)&&!this._globalOptions.ignoreErrors.test(i))&&(n&&n.length?(o=n[0].filename||o,n.reverse(),l={frames:n}):o&&(l={frames:[{filename:o,lineno:r,in_app:!0}]}),(!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(o))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(o)))){var s=b({exception:{values:[{type:e,value:t,stacktrace:l}]},culprit:o},a);this._send(s)}},_trimPacket:function(e){var t=this._globalOptions.maxMessageLength;if(e.message&&(e.message=m(e.message,t)),e.exception){var o=e.exception.values[0];o.value=m(o.value,t)}var r=e.request;return r&&(r.url&&(r.url=m(r.url,this._globalOptions.maxUrlLength)),r.Referer&&(r.Referer=m(r.Referer,this._globalOptions.maxUrlLength))),e.breadcrumbs&&e.breadcrumbs.values&&this._trimBreadcrumbs(e.breadcrumbs),e},_trimBreadcrumbs:function(e){for(var t,o,r,n=["to","from","url"],a=0;a<e.values.length;++a)if((o=e.values[a]).hasOwnProperty("data")&&s(o.data)&&!y(o.data)){r=b({},o.data);for(var l=0;l<n.length;++l)t=n[l],r.hasOwnProperty(t)&&r[t]&&(r[t]=m(r[t],this._globalOptions.maxUrlLength));e.values[a].data=r}},_getHttpData:function(){if(this._hasNavigator||this._hasDocument){var e={};return this._hasNavigator&&I.userAgent&&(e.headers={"User-Agent":navigator.userAgent}),this._hasDocument&&(R.location&&R.location.href&&(e.url=R.location.href),R.referrer&&(e.headers||(e.headers={}),e.headers.Referer=R.referrer)),e}},_resetBackoff:function(){this._backoffDuration=0,this._backoffStart=null},_shouldBackoff:function(){return this._backoffDuration&&O()-this._backoffStart<this._backoffDuration},_isRepeatData:function(e){var t=this._lastData;return!(!t||e.message!==t.message||e.culprit!==t.culprit)&&(e.stacktrace||t.stacktrace?w(e.stacktrace,t.stacktrace):!e.exception&&!t.exception||C(e.exception,t.exception))},_setBackoffState:function(e){if(!this._shouldBackoff()){var t=e.status;if(400===t||401===t||429===t){var o;try{o=e.getResponseHeader("Retry-After"),o=1e3*parseInt(o,10)}catch(e){}this._backoffDuration=o||(2*this._backoffDuration||1e3),this._backoffStart=O()}}},_send:function(e){var t=this._globalOptions,o={project:this._globalProject,logger:t.logger,platform:"javascript"},r=this._getHttpData();r&&(o.request=r),e.trimHeadFrames&&delete e.trimHeadFrames,(e=b(o,e)).tags=b(b({},this._globalContext.tags),e.tags),e.extra=b(b({},this._globalContext.extra),e.extra),e.extra["session:duration"]=O()-this._startTime,this._breadcrumbs&&this._breadcrumbs.length>0&&(e.breadcrumbs={values:[].slice.call(this._breadcrumbs,0)}),d(e.tags)&&delete e.tags,this._globalContext.user&&(e.user=this._globalContext.user),t.environment&&(e.environment=t.environment),t.release&&(e.release=t.release),t.serverName&&(e.server_name=t.serverName),f(t.dataCallback)&&(e=t.dataCallback(e)||e),e&&!d(e)&&(f(t.shouldSendCallback)&&!t.shouldSendCallback(e)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",e):"number"==typeof t.sampleRate?Math.random()<t.sampleRate&&this._sendProcessedPayload(e):this._sendProcessedPayload(e)))},_getUuid:function(){return S()},_sendProcessedPayload:function(e,t){var o=this,r=this._globalOptions;if(this.isSetup())if(e=this._trimPacket(e),this._globalOptions.allowDuplicates||!this._isRepeatData(e)){this._lastEventId=e.event_id||(e.event_id=this._getUuid()),this._lastData=e,this._logDebug("debug","Raven about to send:",e);var n={sentry_version:"7",sentry_client:"raven-js/"+this.VERSION,sentry_key:this._globalKey};this._globalSecret&&(n.sentry_secret=this._globalSecret);var a=e.exception&&e.exception.values[0];this.captureBreadcrumb({category:"sentry",message:a?(a.type?a.type+": ":"")+a.value:e.message,event_id:e.event_id,level:e.level||"error"});var l=this._globalEndpoint;(r.transport||this._makeRequest).call(this,{url:l,auth:n,data:e,options:r,onSuccess:function(){o._resetBackoff(),o._triggerEvent("success",{data:e,src:l}),t&&t()},onError:function(r){o._logDebug("error","Raven transport failed to send: ",r),r.request&&o._setBackoffState(r.request),o._triggerEvent("failure",{data:e,src:l}),r=r||new Error("Raven send failed (no additional details provided)"),t&&t(r)}})}else this._logDebug("warn","Raven dropped repeat event: ",e)},_makeRequest:function(e){var t=j.XMLHttpRequest&&new j.XMLHttpRequest;if(t&&("withCredentials"in t||"undefined"!=typeof XDomainRequest)){var o=e.url;"withCredentials"in t?t.onreadystatechange=function(){if(4===t.readyState)if(200===t.status)e.onSuccess&&e.onSuccess();else if(e.onError){var o=new Error("Sentry error code: "+t.status);o.request=t,e.onError(o)}}:(t=new XDomainRequest,o=o.replace(/^https?:/,""),e.onSuccess&&(t.onload=e.onSuccess),e.onError&&(t.onerror=function(){var o=new Error("Sentry error code: XDomainRequest");o.request=t,e.onError(o)})),t.open("POST",o+"?"+_(e.auth)),t.send(n(e.data))}},_logDebug:function(e){this._originalConsoleMethods[e]&&this.debug&&Function.prototype.apply.call(this._originalConsoleMethods[e],this._originalConsole,[].slice.call(arguments,1))},_mergeContext:function(e,t){u(t)?delete this._globalContext[e]:this._globalContext[e]=b(this._globalContext[e]||{},t)}},M.prototype.setUser=M.prototype.setUserContext,M.prototype.setReleaseContext=M.prototype.setRelease,e.exports=M}).call(this,o(1))},function(e,t,o){(function(t){var r=o(2),n={collectWindowErrors:!0,debug:!1},a="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{},l=[].slice,i="?",s=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function c(){return"undefined"==typeof document||null==document.location?"":document.location.href}n.report=function(){var e,t,o=[],u=null,f=null,p=null;function d(e,t){var r=null;if(!t||n.collectWindowErrors){for(var a in o)if(o.hasOwnProperty(a))try{o[a].apply(null,[e].concat(l.call(arguments,2)))}catch(e){r=e}if(r)throw r}}function h(t,o,a,l,u){if(p)n.computeStackTrace.augmentStackTraceWithInitialElement(p,o,a,t),b();else if(u&&r.isError(u))d(n.computeStackTrace(u),!0);else{var f,h={url:o,line:a,column:l},m=void 0,y=t;if("[object String]"==={}.toString.call(t))(f=t.match(s))&&(m=f[1],y=f[2]);h.func=i,d({name:m,message:y,url:c(),stack:[h]},!0)}return!!e&&e.apply(this,arguments)}function b(){var e=p,t=u;u=null,p=null,f=null,d.apply(null,[e,!1].concat(t))}function m(e,t){var o=l.call(arguments,1);if(p){if(f===e)return;b()}var r=n.computeStackTrace(e);if(p=r,f=e,u=o,setTimeout(function(){f===e&&b()},r.incomplete?2e3:0),!1!==t)throw e}return m.subscribe=function(r){t||(e=a.onerror,a.onerror=h,t=!0),o.push(r)},m.unsubscribe=function(e){for(var t=o.length-1;t>=0;--t)o[t]===e&&o.splice(t,1)},m.uninstall=function(){t&&(a.onerror=e,t=!1,e=void 0),o=[]},m}(),n.computeStackTrace=function(){function e(e){if(void 0!==e.stack&&e.stack){for(var t,o,r,n=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,a=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,l=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,s=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,u=/\((\S*)(?::(\d+))(?::(\d+))\)/,f=e.stack.split("\n"),p=[],d=(/^(.*) is undefined$/.exec(e.message),0),h=f.length;d<h;++d){if(o=n.exec(f[d])){var b=o[2]&&0===o[2].indexOf("native");o[2]&&0===o[2].indexOf("eval")&&(t=u.exec(o[2]))&&(o[2]=t[1],o[3]=t[2],o[4]=t[3]),r={url:b?null:o[2],func:o[1]||i,args:b?[o[2]]:[],line:o[3]?+o[3]:null,column:o[4]?+o[4]:null}}else if(o=l.exec(f[d]))r={url:o[2],func:o[1]||i,args:[],line:+o[3],column:o[4]?+o[4]:null};else{if(!(o=a.exec(f[d])))continue;o[3]&&o[3].indexOf(" > eval")>-1&&(t=s.exec(o[3]))?(o[3]=t[1],o[4]=t[2],o[5]=null):0!==d||o[5]||void 0===e.columnNumber||(p[0].column=e.columnNumber+1),r={url:o[3],func:o[1]||i,args:o[2]?o[2].split(","):[],line:o[4]?+o[4]:null,column:o[5]?+o[5]:null}}!r.func&&r.line&&(r.func=i),p.push(r)}return p.length?{name:e.name,message:e.message,url:c(),stack:p}:null}}function t(e,t,o,r){var n={url:t,line:o};if(n.url&&n.line){if(e.incomplete=!1,n.func||(n.func=i),e.stack.length>0&&e.stack[0].url===n.url){if(e.stack[0].line===n.line)return!1;if(!e.stack[0].line&&e.stack[0].func===n.func)return e.stack[0].line=n.line,!1}return e.stack.unshift(n),e.partial=!0,!0}return e.incomplete=!0,!1}function o(e,a){for(var l,s,u=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,f=[],p={},d=!1,h=o.caller;h&&!d;h=h.caller)if(h!==r&&h!==n.report){if(s={url:null,func:i,line:null,column:null},h.name?s.func=h.name:(l=u.exec(h.toString()))&&(s.func=l[1]),void 0===s.func)try{s.func=l.input.substring(0,l.input.indexOf("{"))}catch(e){}p[""+h]?d=!0:p[""+h]=!0,f.push(s)}a&&f.splice(0,a);var b={name:e.name,message:e.message,url:c(),stack:f};return t(b,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),b}function r(t,r){var a=null;r=null==r?0:+r;try{if(a=e(t))return a}catch(e){if(n.debug)throw e}try{if(a=o(t,r+1))return a}catch(e){if(n.debug)throw e}return{name:t.name,message:t.message,url:c()}}return r.augmentStackTraceWithInitialElement=t,r.computeStackTraceFromStackProp=e,r}(),e.exports=n}).call(this,o(1))},function(e,t){function o(e,t){for(var o=0;o<e.length;++o)if(e[o]===t)return o;return-1}function r(e,t){var r=[],n=[];return null==t&&(t=function(e,t){return r[0]===t?"[Circular ~]":"[Circular ~."+n.slice(0,o(r,t)).join(".")+"]"}),function(a,l){if(r.length>0){var i=o(r,this);~i?r.splice(i+1):r.push(this),~i?n.splice(i,1/0,a):n.push(a),~o(r,l)&&(l=t.call(this,a,l))}else r.push(l);return null==e?l instanceof Error?function(e){var t={stack:e.stack,message:e.message,name:e.name};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}(l):l:e.call(this,a,l)}}(e.exports=function(e,t,o,n){return JSON.stringify(e,r(t,n),o)}).getSerialize=r},function(e,t){function o(e){this.name="RavenConfigError",this.message=e}o.prototype=new Error,o.prototype.constructor=o,e.exports=o},function(e,t){e.exports={wrapMethod:function(e,t,o){var r=e[t],n=e;if(t in e){var a="warn"===t?"warning":t;e[t]=function(){var e=[].slice.call(arguments),l=""+e.join(" "),i={level:a,logger:"console",extra:{arguments:e}};"assert"===t?!1===e[0]&&(l="Assertion failed: "+(e.slice(1).join(" ")||"console.assert"),i.extra.arguments=e.slice(1),o&&o(l,i)):o&&o(l,i),r&&Function.prototype.apply.call(r,n,e)}}}}},function(e,t,o){"use strict";o.r(t);var r=o(0),n=o.n(r),a=window.leadinConfig,l=a.adminUrl,i=a.ajaxUrl,s=a.env,c=a.hubspotBaseUrl,u=a.leadinPluginVersion,f=a.plugins,p=a.phpVersion,d=a.portalId,h=a.theme,b=a.wpVersion,m=window.leadinI18n;var y=n.a;function g(){var e=document.getElementById("toplevel_page_leadin"),t=e&&e.querySelector(".wp-first-item"),o="".concat(c,"/chatflows/").concat(d),r='<li><a href="'.concat(o,'" target="_blank">').concat(m.chatflows,"</a></li>");t&&t.insertAdjacentHTML("afterend",r)}function v(e,t){for(var o=0;o<t.length;o++){var r=t[o];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function _(){try{if(window.localStorage.LEADIN_DEBUG){for(var e,t=arguments.length,o=new Array(t),r=0;r<t;r++)o[r]=arguments[r];o.unshift("[Leadin]"),(e=console).log.apply(e,o)}}catch(e){}}var S={iframe:"#leadin-iframe",allMenuButtons:".toplevel_page_leadin > a, .toplevel_page_leadin > ul > li > a",subMenuButtons:".toplevel_page_leadin > ul > li"},x=new(function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.bus=jQuery({})}var t,o,r;return t=e,(o=[{key:"trigger",value:function(){var e;(e=this.bus).trigger.apply(e,arguments)}},{key:"on",value:function(e,t){this.bus.on(e,y.wrap(t))}}])&&v(t.prototype,o),r&&v(t,r),e}()),C=[];function w(e){_("Posting message"),_(JSON.stringify(e)),jQuery(S.iframe)[0].contentWindow.postMessage(JSON.stringify(e),c)}function E(e,t){t||(t="Message Received");var o=Object.assign({},e);o.response=t,w(o)}function F(e){_("Received message"),_(JSON.stringify(e)),e.response&&e._callbackId?function(e){C[e._callbackId-1](e.response)}(e):Object.keys(e).forEach(function(t){x.trigger(t,[e[t],E.bind(null,e)])})}function T(e){if(e.origin===c)try{F(JSON.parse(e.data))}catch(e){}}function k(e,t,o,r,n){var a={url:"".concat(i,"?action=").concat(e),method:t,contentType:"application/json",success:"function"==typeof r?y.wrap(function(e){return r(JSON.parse(e))}):void 0,error:y.wrap(function(e){var t;try{t=JSON.parse(e.responseText).error}catch(o){t=e.responseText}y.captureMessage("AJAX request failed with code ".concat(e.status,": ").concat(t)),"function"==typeof n&&n()})};o&&(a.data=JSON.stringify(o)),jQuery.ajax(a)}function L(e,t,o,r){return k(e,"POST",t,o,r)}function O(e,t,o){return k(e,"GET",null,t,o)}var j,R=function(){return O("leadin_get_portal")},I=!1;function B(){j=setTimeout(function(){R(function(e){e.portalId?location.reload(!0):I||B()},B)},5e3)}var M=L.bind(null,"leadin_disconnect_ajax",{}),N=O.bind(null,"leadin_get_domain"),z=O.bind(null,"leadin_mark_outdated");function D(e){return function(e,t){x.on(e,function(){for(var e=arguments.length,o=new Array(e),r=0;r<e;r++)o[r]=arguments[r];t.apply(null,o.slice(1))})}.bind(null,e)}var U=D("leadin_clear_query_param"),P=D("leadin_connect_portal"),H=D("leadin_disable_navigation"),A=D("leadin_disconnect_portal"),q=D("leadin_enter_fullscreen"),J=D("leadin_exit_fullscreen"),W=D("leadin_get_assets_payload"),K=D("leadin_get_wp_domain"),$=D("leadin_init_navigation"),X=D("leadin_interframe_ready"),Q=D("leadin_mark_outdated"),G=D("leadin_page_reload"),V=D("leadin_upgrade");function Z(e){!function(e,t,o,r,n){n||(n=500);var a=setTimeout(y.wrap(function(){y.captureMessage("LeadinWordpressPlugin postMessage response timeout on message key: ".concat(e)),r()}),n),l={};l[e]=t,l._callbackId=C.push(function(){clearTimeout(a),o.apply(void 0,arguments)}),w(l)}("leadin_change_route",e,null,function(){return location.reload(!0)})}function Y(){function e(){Z(window.location.search.match(/page=leadin_?(\w*)/)[1]),function(){jQuery(S.subMenuButtons).removeClass("current");var e=window.location.search.match(/\?page=leadin_?\w*/)[0];jQuery('a[href="admin.php'.concat(e,'"]')).parent().addClass("current")}()}window.addEventListener("popstate",e),jQuery(S.allMenuButtons).click(function(){event.metaKey||event.altKey||event.shiftKey||(window.history.pushState(null,null,jQuery(this).attr("href")),e(),event.preventDefault())})}var ee={"genesis-sample":{formsStyle:{fontFamily:"Source Sans Pro",labelTextColor:"#333333",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#0073e5"},chatStyle:{accentColor:"#0073e5"},onScrollLeadFlowStyle:{color:"#0073e5"},onExitLeadFlowStyle:{color:"#0073e5"}},"academy-pro":{formsStyle:{fontFamily:"PT Sans",labelTextColor:"#222222",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#e22c2f"},chatStyle:{accentColor:"#e22c2f"},onScrollLeadFlowStyle:{color:"#e22c2f"},onExitLeadFlowStyle:{color:"#e22c2f"}},"agency-pro":{formsStyle:{fontFamily:"EB Garamond",labelTextColor:"#666666",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#d7c603"},chatStyle:{accentColor:"#d7c603"},onScrollLeadFlowStyle:{color:"#d7c603"},onExitLeadFlowStyle:{color:"#d7c603"}},"agentpress-pro":{formsStyle:{fontFamily:"Roboto",labelTextColor:"#1a212b",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#d23836"},chatStyle:{accentColor:"#d23836"},onScrollLeadFlowStyle:{color:"#d23836"},onExitLeadFlowStyle:{color:"#d23836"}},"altitude-pro":{formsStyle:{fontFamily:"Ek Mukta",labelTextColor:"#000000",labelTextSize:"20px",submitFontColor:"#ffffff",submitColor:"#079bc4"},chatStyle:{accentColor:"#079bc4"},onScrollLeadFlowStyle:{color:"#079bc4"},onExitLeadFlowStyle:{color:"#079bc4"}},"ambiance-pro":{formsStyle:{fontFamily:"Merriweather",labelTextColor:"#333333",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#e12727"},chatStyle:{accentColor:"#e12727"},onScrollLeadFlowStyle:{color:"#e12727"},onExitLeadFlowStyle:{color:"#e12727"}},"atmosphere-pro":{formsStyle:{fontFamily:"Lato",labelTextColor:"#333333",labelTextSize:"20px",submitFontColor:"#ffffff",submitColor:"#333333"},chatStyle:{accentColor:"#333333"},onScrollLeadFlowStyle:{color:"#333333"},onExitLeadFlowStyle:{color:"#333333"}},"author-pro":{formsStyle:{fontFamily:"Lato",labelTextColor:"#000000",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#000000"},chatStyle:{accentColor:"#000000"},onScrollLeadFlowStyle:{color:"#000000"},onExitLeadFlowStyle:{color:"#000000"}},"authority-pro":{formsStyle:{fontFamily:"Libre Baskerville",labelTextColor:"#333333",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#000cff"},chatStyle:{accentColor:"#000cff"},onScrollLeadFlowStyle:{color:"#000cff"},onExitLeadFlowStyle:{color:"#000cff"}},"beautiful-pro":{formsStyle:{fontFamily:"Lato",labelTextColor:"#666666",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#e5554e"},chatStyle:{accentColor:"#e5554e"},onScrollLeadFlowStyle:{color:"#e5554e"},onExitLeadFlowStyle:{color:"#e5554e"}},"breakthrough-pro":{formsStyle:{fontFamily:"Alegreya Sans",labelTextColor:"#4e4756",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#4a4f9b"},chatStyle:{accentColor:"#4a4f9b"},onScrollLeadFlowStyle:{color:"#4a4f9b"},onExitLeadFlowStyle:{color:"#4a4f9b"}},"cafe-pro":{formsStyle:{fontFamily:"Crimson Text",labelTextColor:"#000000",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#000000"},chatStyle:{accentColor:"#000000"},onScrollLeadFlowStyle:{color:"#000000"},onExitLeadFlowStyle:{color:"#000000"}},"daily-dish-pro":{formsStyle:{fontFamily:"Cormorant",labelTextColor:"#000000",labelTextSize:"20px",submitFontColor:"#ffffff",submitColor:"#d9037f"},chatStyle:{accentColor:"#d9037f"},onScrollLeadFlowStyle:{color:"#d9037f"},onExitLeadFlowStyle:{color:"#d9037f"}},"digital-pro":{formsStyle:{fontFamily:"Lora",labelTextColor:"#5b5e5e",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#e85555"},chatStyle:{accentColor:"#e85555"},onScrollLeadFlowStyle:{color:"#e85555"},onExitLeadFlowStyle:{color:"#e85555"}},"education-pro":{formsStyle:{fontFamily:"Roboto Condensed",labelTextColor:"#444444",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#78a7c8"},chatStyle:{accentColor:"#78a7c8"},onScrollLeadFlowStyle:{color:"#78a7c8"},onExitLeadFlowStyle:{color:"#78a7c8"}},"eleven40-pro":{formsStyle:{fontFamily:"Lora",labelTextColor:"#000000",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#ed702b"},chatStyle:{accentColor:"#ed702b"},onScrollLeadFlowStyle:{color:"#ed702b"},onExitLeadFlowStyle:{color:"#ed702b"}},"enterprise-pro":{formsStyle:{fontFamily:"Lato",labelTextColor:"#777777",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#31b2ed"},chatStyle:{accentColor:"#31b2ed"},onScrollLeadFlowStyle:{color:"#31b2ed"},onExitLeadFlowStyle:{color:"#31b2ed"}},"essence-pro":{formsStyle:{fontFamily:"Alegreya Sans",labelTextColor:"#333333",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#be8100"},chatStyle:{accentColor:"#be8100"},onScrollLeadFlowStyle:{color:"#be8100"},onExitLeadFlowStyle:{color:"#be8100"}},"executive-pro":{formsStyle:{fontFamily:"Open Sans",labelTextColor:"#222222",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#64c9ea"},chatStyle:{accentColor:"#64c9ea"},onScrollLeadFlowStyle:{color:"#64c9ea"},onExitLeadFlowStyle:{color:"#64c9ea"}},"generate-pro":{formsStyle:{fontFamily:"Source Sans Pro",labelTextColor:"#222222",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#eb232f"},chatStyle:{accentColor:"#eb232f"},onScrollLeadFlowStyle:{color:"#eb232f"},onExitLeadFlowStyle:{color:"#eb232f"}},"infinity-pro":{formsStyle:{fontFamily:"Cormorant Garamond",labelTextColor:"#000000",labelTextSize:"22px",submitFontColor:"#ffffff",submitColor:"#d43c67"},chatStyle:{accentColor:"#d43c67"},onScrollLeadFlowStyle:{color:"#d43c67"},onExitLeadFlowStyle:{color:"#d43c67"}},"interior-pro":{formsStyle:{fontFamily:"Lora",labelTextColor:"#777777",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#009092"},chatStyle:{accentColor:"#009092"},onScrollLeadFlowStyle:{color:"#009092"},onExitLeadFlowStyle:{color:"#009092"}},"lifestyle-pro":{formsStyle:{fontFamily:"Droid Sans",labelTextColor:"#767673",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#27968b"},chatStyle:{accentColor:"#27968b"},onScrollLeadFlowStyle:{color:"#27968b"},onExitLeadFlowStyle:{color:"#27968b"}},"magazine-pro":{formsStyle:{fontFamily:"Roboto",labelTextColor:"#222222",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#008285"},chatStyle:{accentColor:"#008285"},onScrollLeadFlowStyle:{color:"#008285"},onExitLeadFlowStyle:{color:"#008285"}},"metro-pro":{formsStyle:{fontFamily:"Helvetica Neue",labelTextColor:"#222222",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#f96e5b"},chatStyle:{accentColor:"#f96e5b"},onScrollLeadFlowStyle:{color:"#f96e5b"},onExitLeadFlowStyle:{color:"#f96e5b"}},"minimum-pro":{formsStyle:{fontFamily:"Roboto Slab",labelTextColor:"#333333",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#0ebfe9"},chatStyle:{accentColor:"#0ebfe9"},onScrollLeadFlowStyle:{color:"#0ebfe9"},onExitLeadFlowStyle:{color:"#0ebfe9"}},"modern-studio-pro":{formsStyle:{fontFamily:"Lato",labelTextColor:"#000000",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#000000"},chatStyle:{accentColor:"#000000"},onScrollLeadFlowStyle:{color:"#000000"},onExitLeadFlowStyle:{color:"#000000"}},"monochrome-pro":{formsStyle:{fontFamily:"Muli",labelTextColor:"#000000",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#0066cc"},chatStyle:{accentColor:"#0066cc"},onScrollLeadFlowStyle:{color:"#0066cc"},onExitLeadFlowStyle:{color:"#0066cc"}},"news-pro":{formsStyle:{fontFamily:"Raleway",labelTextColor:"#666666",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#ff0000"},chatStyle:{accentColor:"#ff0000"},onScrollLeadFlowStyle:{color:"#ff0000"},onExitLeadFlowStyle:{color:"#ff0000"}},"no-sidebar-pro":{formsStyle:{fontFamily:"Lato",labelTextColor:"#333333",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#333333"},chatStyle:{accentColor:"#333333"},onScrollLeadFlowStyle:{color:"#333333"},onExitLeadFlowStyle:{color:"#333333"}},"outfitter-pro":{formsStyle:{fontFamily:"Noto Sans",labelTextColor:"#546e7a",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#000000"},chatStyle:{accentColor:"#000000"},onScrollLeadFlowStyle:{color:"#000000"},onExitLeadFlowStyle:{color:"#000000"}},"outreach-pro":{formsStyle:{fontFamily:"Lato",labelTextColor:"#333333",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#6ab446"},chatStyle:{accentColor:"#6ab446"},onScrollLeadFlowStyle:{color:"#6ab446"},onExitLeadFlowStyle:{color:"#6ab446"}},"parallax-pro":{formsStyle:{fontFamily:"Cormorant Garamond",labelTextColor:"#000000",labelTextSize:"22px",submitFontColor:"#ffffff",submitColor:"#00a0af"},chatStyle:{accentColor:"#00a0af"},onScrollLeadFlowStyle:{color:"#00a0af"},onExitLeadFlowStyle:{color:"#00a0af"}},"revolution-pro":{formsStyle:{fontFamily:"Noto Serif SC",labelTextColor:"#000000",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#008080"},chatStyle:{accentColor:"#008080"},onScrollLeadFlowStyle:{color:"#008080"},onExitLeadFlowStyle:{color:"#008080"}},"sixteen-nine-pro":{formsStyle:{fontFamily:"Roboto",labelTextColor:"#000000",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#1dbec0"},chatStyle:{accentColor:"#1dbec0"},onScrollLeadFlowStyle:{color:"#1dbec0"},onExitLeadFlowStyle:{color:"#1dbec0"}},"smart-passive-income-pro":{formsStyle:{fontFamily:"Roboto",labelTextColor:"#333333",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#0e763c"},chatStyle:{accentColor:"#0e763c"},onScrollLeadFlowStyle:{color:"#0e763c"},onExitLeadFlowStyle:{color:"#0e763c"}},"wellness-pro":{formsStyle:{fontFamily:"Open Sans",labelTextColor:"#000000",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#5da44f"},chatStyle:{accentColor:"#5da44f"},onScrollLeadFlowStyle:{color:"#5da44f"},onExitLeadFlowStyle:{color:"#5da44f"}},"workstation-pro":{formsStyle:{fontFamily:"Baskerville",labelTextColor:"#222222",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#ff4800"},chatStyle:{accentColor:"#ff4800"},onScrollLeadFlowStyle:{color:"#ff4800"},onExitLeadFlowStyle:{color:"#ff4800"}}};X(function(e,t){t("Interframe Ready")}),P(function(e,t){!function(e,t,o){L("leadin_registration_ajax",{portalId:e},t,o)}(e,function(){clearTimeout(j),I=!0,t({success:!0})},t.bind(null,{success:!1}))}),A(function(e,t){M(t.bind(null,{success:!0}),t.bind(null,{success:!1}))}),Q(function(e,t){z(t)}),V(function(e,t){t(),location.href="".concat(l,"plugins.php")}),G(function(e,t){t(),window.location.reload(!0)}),$(function(e,t){t(),Y()}),H(function(e,t){t(),jQuery(S.allMenuButtons).off("click")}),U(function(e,t){t();var o=window.location.toString();o.indexOf("?")>0&&(o=o.substring(0,o.indexOf("?")));var r="".concat(o,"?page=leadin");window.history.pushState({},"",r)}),K(function(e,t){N(function(e){e.domain&&t(e.domain)})}),W(function(e,t){t({payload:ee[h]})}),q(function(e,t){t(),jQuery(S.iframe).addClass("leadin-iframe-fullscreen")}),J(function(e,t){t(),jQuery(S.iframe).removeClass("leadin-iframe-fullscreen")}),"prod"===s&&(n.a.config("https://[email protected]/1",{instrument:{tryCatch:!1}}).install(),n.a.setTagsContext({leadin:u,php:p,wordpress:b}),n.a.setUserContext({hub:d,plugins:Object.keys(f).map(function(e){return"".concat(e,"#").concat(f[e].Version)}).join(",")})),y.context(function(){window.addEventListener("message",T),-1!==window.location.search.indexOf("page=leadin")&&(d||B()),jQuery(document).ready(g)})}]);
     1!function(e){var t={};function o(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.m=e,o.c=t,o.d=function(e,t,r){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=8)}([function(e,t,o){(function(t){var r=o(3),n="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{},a=n.Raven,l=new r;l.noConflict=function(){return n.Raven=a,l},l.afterLoad(),e.exports=l}).call(this,o(1))},function(e,t){var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(e){"object"==typeof window&&(o=window)}e.exports=o},function(e,t,o){(function(t){var o="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{};function r(e){return void 0===e}function n(e){return"[object String]"===Object.prototype.toString.call(e)}function a(){try{return new ErrorEvent(""),!0}catch(e){return!1}}function l(e,t){var o,n;if(r(e.length))for(o in e)i(e,o)&&t.call(null,o,e[o]);else if(n=e.length)for(o=0;o<n;o++)t.call(null,o,e[o])}function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function s(e){var t,o,r,a,l,i=[];if(!e||!e.tagName)return"";if(i.push(e.tagName.toLowerCase()),e.id&&i.push("#"+e.id),(t=e.className)&&n(t))for(o=t.split(/\s+/),l=0;l<o.length;l++)i.push("."+o[l]);var s=["type","name","title","alt"];for(l=0;l<s.length;l++)r=s[l],(a=e.getAttribute(r))&&i.push("["+r+'="'+a+'"]');return i.join("")}function c(e,t){return!!(!!e^!!t)}function u(e,t){if(c(e,t))return!1;var o,r,n=e.frames,a=t.frames;if(n.length!==a.length)return!1;for(var l=0;l<n.length;l++)if(o=n[l],r=a[l],o.filename!==r.filename||o.lineno!==r.lineno||o.colno!==r.colno||o.function!==r.function)return!1;return!0}e.exports={isObject:function(e){return"object"==typeof e&&null!==e},isError:function(e){switch({}.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},isErrorEvent:function(e){return a()&&"[object ErrorEvent]"==={}.toString.call(e)},isUndefined:r,isFunction:function(e){return"function"==typeof e},isString:n,isEmptyObject:function(e){for(var t in e)return!1;return!0},supportsErrorEvent:a,wrappedCallback:function(e){return function(t,o){var r=e(t)||t;return o&&o(r)||r}},each:l,objectMerge:function(e,t){return t?(l(t,function(t,o){e[t]=o}),e):e},truncate:function(e,t){return!t||e.length<=t?e:e.substr(0,t)+"…"},objectFrozen:function(e){return!!Object.isFrozen&&Object.isFrozen(e)},hasKey:i,joinRegExp:function(e){for(var t,o=[],r=0,a=e.length;r<a;r++)n(t=e[r])?o.push(t.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")):t&&t.source&&o.push(t.source);return new RegExp(o.join("|"),"i")},urlencode:function(e){var t=[];return l(e,function(e,o){t.push(encodeURIComponent(e)+"="+encodeURIComponent(o))}),t.join("&")},uuid4:function(){var e=o.crypto||o.msCrypto;if(!r(e)&&e.getRandomValues){var t=new Uint16Array(8);e.getRandomValues(t),t[3]=4095&t[3]|16384,t[4]=16383&t[4]|32768;var n=function(e){for(var t=e.toString(16);t.length<4;)t="0"+t;return t};return n(t[0])+n(t[1])+n(t[2])+n(t[3])+n(t[4])+n(t[5])+n(t[6])+n(t[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})},htmlTreeAsString:function(e){for(var t,o=[],r=0,n=0,a=" > ".length;e&&r++<5&&!("html"===(t=s(e))||r>1&&n+o.length*a+t.length>=80);)o.push(t),n+=t.length,e=e.parentNode;return o.reverse().join(" > ")},htmlElementAsString:s,isSameException:function(e,t){return!c(e,t)&&(e=e.values[0],t=t.values[0],e.type===t.type&&e.value===t.value&&u(e.stacktrace,t.stacktrace))},isSameStacktrace:u,parseUrl:function(e){var t=e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!t)return{};var o=t[6]||"",r=t[8]||"";return{protocol:t[2],host:t[4],path:t[5],relative:t[5]+o+r}},fill:function(e,t,o,r){var n=e[t];e[t]=o(n),r&&r.push([e,t,n])}}}).call(this,o(1))},function(e,t,o){(function(t){var r=o(4),n=o(5),a=o(6),l=o(2),i=l.isError,s=l.isObject,c=(s=l.isObject,l.isErrorEvent),u=l.isUndefined,f=l.isFunction,p=l.isString,d=l.isEmptyObject,h=l.each,b=l.objectMerge,m=l.truncate,y=l.objectFrozen,g=l.hasKey,v=l.joinRegExp,_=l.urlencode,S=l.uuid4,x=l.htmlTreeAsString,C=l.isSameException,w=l.isSameStacktrace,E=l.parseUrl,F=l.fill,T=o(7).wrapMethod,k="source protocol user pass host port path".split(" "),L=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function O(){return+new Date}var j="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{},R=j.document,I=j.navigator;function B(e,t){return f(t)?function(o){return t(o,e)}:t}function N(){for(var e in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!u(R),this._hasNavigator=!u(I),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],collectWindowErrors:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=j.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=O(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=j.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[e]=this._originalConsole[e]}N.prototype={VERSION:"3.19.1",debug:!1,TraceKit:r,config:function(e,t){var o=this;if(o._globalServer)return this._logDebug("error","Error: Raven has already been configured"),o;if(!e)return o;var n=o._globalOptions;t&&h(t,function(e,t){"tags"===e||"extra"===e||"user"===e?o._globalContext[e]=t:n[e]=t}),o.setDSN(e),n.ignoreErrors.push(/^Script error\.?$/),n.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),n.ignoreErrors=v(n.ignoreErrors),n.ignoreUrls=!!n.ignoreUrls.length&&v(n.ignoreUrls),n.whitelistUrls=!!n.whitelistUrls.length&&v(n.whitelistUrls),n.includePaths=v(n.includePaths),n.maxBreadcrumbs=Math.max(0,Math.min(n.maxBreadcrumbs||100,100));var a={xhr:!0,console:!0,dom:!0,location:!0},l=n.autoBreadcrumbs;"[object Object]"==={}.toString.call(l)?l=b(a,l):!1!==l&&(l=a),n.autoBreadcrumbs=l;var i={tryCatch:!0},s=n.instrument;return"[object Object]"==={}.toString.call(s)?s=b(i,s):!1!==s&&(s=i),n.instrument=s,r.collectWindowErrors=!!n.collectWindowErrors,o},install:function(){var e=this;return e.isSetup()&&!e._isRavenInstalled&&(r.report.subscribe(function(){e._handleOnErrorStackInfo.apply(e,arguments)}),e._globalOptions.instrument&&e._globalOptions.instrument.tryCatch&&e._instrumentTryCatch(),e._globalOptions.autoBreadcrumbs&&e._instrumentBreadcrumbs(),e._drainPlugins(),e._isRavenInstalled=!0),Error.stackTraceLimit=e._globalOptions.stackTraceLimit,this},setDSN:function(e){var t=this._parseDSN(e),o=t.path.lastIndexOf("/"),r=t.path.substr(1,o);this._dsn=e,this._globalKey=t.user,this._globalSecret=t.pass&&t.pass.substr(1),this._globalProject=t.path.substr(o+1),this._globalServer=this._getGlobalServer(t),this._globalEndpoint=this._globalServer+"/"+r+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(e,t,o){return f(e)&&(o=t||[],t=e,e=void 0),this.wrap(e,t).apply(this,o)},wrap:function(e,t,o){var r=this;if(u(t)&&!f(e))return e;if(f(e)&&(t=e,e=void 0),!f(t))return t;try{if(t.__raven__)return t;if(t.__raven_wrapper__)return t.__raven_wrapper__}catch(e){return t}function n(){var n=[],a=arguments.length,l=!e||e&&!1!==e.deep;for(o&&f(o)&&o.apply(this,arguments);a--;)n[a]=l?r.wrap(e,arguments[a]):arguments[a];try{return t.apply(this,n)}catch(t){throw r._ignoreNextOnError(),r.captureException(t,e),t}}for(var a in t)g(t,a)&&(n[a]=t[a]);return n.prototype=t.prototype,t.__raven_wrapper__=n,n.__raven__=!0,n.__inner__=t,n},uninstall:function(){return r.report.uninstall(),this._restoreBuiltIns(),Error.stackTraceLimit=this._originalErrorStackTraceLimit,this._isRavenInstalled=!1,this},captureException:function(e,t){var o=!i(e),n=!c(e),a=c(e)&&!e.error;if(o&&n||a)return this.captureMessage(e,b({trimHeadFrames:1,stacktrace:!0},t));c(e)&&(e=e.error),this._lastCapturedException=e;try{var l=r.computeStackTrace(e);this._handleStackInfo(l,t)}catch(t){if(e!==t)throw t}return this},captureMessage:function(e,t){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)){var o,n=b({message:e+""},t=t||{});try{throw new Error(e)}catch(e){o=e}o.name=null;var a=r.computeStackTrace(o),l=a.stack[1],i=l&&l.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(i))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(i))){if(this._globalOptions.stacktrace||t&&t.stacktrace){t=b({fingerprint:e,trimHeadFrames:(t.trimHeadFrames||0)+1},t);var s=this._prepareFrames(a,t);n.stacktrace={frames:s.reverse()}}return this._send(n),this}}},captureBreadcrumb:function(e){var t=b({timestamp:O()/1e3},e);if(f(this._globalOptions.breadcrumbCallback)){var o=this._globalOptions.breadcrumbCallback(t);if(s(o)&&!d(o))t=o;else if(!1===o)return this}return this._breadcrumbs.push(t),this._breadcrumbs.length>this._globalOptions.maxBreadcrumbs&&this._breadcrumbs.shift(),this},addPlugin:function(e){var t=[].slice.call(arguments,1);return this._plugins.push([e,t]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(e){return this._globalContext.user=e,this},setExtraContext:function(e){return this._mergeContext("extra",e),this},setTagsContext:function(e){return this._mergeContext("tags",e),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(n(this._globalContext))},setEnvironment:function(e){return this._globalOptions.environment=e,this},setRelease:function(e){return this._globalOptions.release=e,this},setDataCallback:function(e){var t=this._globalOptions.dataCallback;return this._globalOptions.dataCallback=B(t,e),this},setBreadcrumbCallback:function(e){var t=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=B(t,e),this},setShouldSendCallback:function(e){var t=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=B(t,e),this},setTransport:function(e){return this._globalOptions.transport=e,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return!!this._hasJSON&&(!!this._globalServer||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this._logDebug("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var e=j.RavenConfig;e&&this.config(e.dsn,e.config).install()},showReportDialog:function(e){if(R){var t=(e=e||{}).eventId||this.lastEventId();if(!t)throw new a("Missing eventId");var o=e.dsn||this._dsn;if(!o)throw new a("Missing DSN");var r=encodeURIComponent,n="";n+="?eventId="+r(t),n+="&dsn="+r(o);var l=e.user||this._globalContext.user;l&&(l.name&&(n+="&name="+r(l.name)),l.email&&(n+="&email="+r(l.email)));var i=this._getGlobalServer(this._parseDSN(o)),s=R.createElement("script");s.async=!0,s.src=i+"/api/embed/error-page/"+n,(R.head||R.body).appendChild(s)}},_ignoreNextOnError:function(){var e=this;this._ignoreOnError+=1,setTimeout(function(){e._ignoreOnError-=1})},_triggerEvent:function(e,t){var o,r;if(this._hasDocument){for(r in t=t||{},e="raven"+e.substr(0,1).toUpperCase()+e.substr(1),R.createEvent?(o=R.createEvent("HTMLEvents")).initEvent(e,!0,!0):(o=R.createEventObject()).eventType=e,t)g(t,r)&&(o[r]=t[r]);if(R.createEvent)R.dispatchEvent(o);else try{R.fireEvent("on"+o.eventType.toLowerCase(),o)}catch(e){}}},_breadcrumbEventHandler:function(e){var t=this;return function(o){if(t._keypressTimeout=null,t._lastCapturedEvent!==o){var r;t._lastCapturedEvent=o;try{r=x(o.target)}catch(e){r="<unknown>"}t.captureBreadcrumb({category:"ui."+e,message:r})}}},_keypressEventHandler:function(){var e=this;return function(t){var o;try{o=t.target}catch(e){return}var r=o&&o.tagName;if(r&&("INPUT"===r||"TEXTAREA"===r||o.isContentEditable)){var n=e._keypressTimeout;n||e._breadcrumbEventHandler("input")(t),clearTimeout(n),e._keypressTimeout=setTimeout(function(){e._keypressTimeout=null},1e3)}}},_captureUrlChange:function(e,t){var o=E(this._location.href),r=E(t),n=E(e);this._lastHref=t,o.protocol===r.protocol&&o.host===r.host&&(t=r.relative),o.protocol===n.protocol&&o.host===n.host&&(e=n.relative),this.captureBreadcrumb({category:"navigation",data:{to:t,from:e}})},_instrumentTryCatch:function(){var e=this,t=e._wrappedBuiltIns;function o(t){return function(o,r){for(var n=new Array(arguments.length),a=0;a<n.length;++a)n[a]=arguments[a];var l=n[0];return f(l)&&(n[0]=e.wrap(l)),t.apply?t.apply(this,n):t(n[0],n[1])}}var r=this._globalOptions.autoBreadcrumbs;function n(o){var n=j[o]&&j[o].prototype;n&&n.hasOwnProperty&&n.hasOwnProperty("addEventListener")&&(F(n,"addEventListener",function(t){return function(n,a,l,i){try{a&&a.handleEvent&&(a.handleEvent=e.wrap(a.handleEvent))}catch(e){}var s,c,u;return r&&r.dom&&("EventTarget"===o||"Node"===o)&&(c=e._breadcrumbEventHandler("click"),u=e._keypressEventHandler(),s=function(e){if(e){var t;try{t=e.type}catch(e){return}return"click"===t?c(e):"keypress"===t?u(e):void 0}}),t.call(this,n,e.wrap(a,void 0,s),l,i)}},t),F(n,"removeEventListener",function(e){return function(t,o,r,n){try{o=o&&(o.__raven_wrapper__?o.__raven_wrapper__:o)}catch(e){}return e.call(this,t,o,r,n)}},t))}F(j,"setTimeout",o,t),F(j,"setInterval",o,t),j.requestAnimationFrame&&F(j,"requestAnimationFrame",function(t){return function(o){return t(e.wrap(o))}},t);for(var a=["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"],l=0;l<a.length;l++)n(a[l])},_instrumentBreadcrumbs:function(){var e=this,t=this._globalOptions.autoBreadcrumbs,o=e._wrappedBuiltIns;function r(t,o){t in o&&f(o[t])&&F(o,t,function(t){return e.wrap(t)})}if(t.xhr&&"XMLHttpRequest"in j){var n=XMLHttpRequest.prototype;F(n,"open",function(t){return function(o,r){return p(r)&&-1===r.indexOf(e._globalKey)&&(this.__raven_xhr={method:o,url:r,status_code:null}),t.apply(this,arguments)}},o),F(n,"send",function(t){return function(o){var n=this;function a(){if(n.__raven_xhr&&4===n.readyState){try{n.__raven_xhr.status_code=n.status}catch(e){}e.captureBreadcrumb({type:"http",category:"xhr",data:n.__raven_xhr})}}for(var l=["onload","onerror","onprogress"],i=0;i<l.length;i++)r(l[i],n);return"onreadystatechange"in n&&f(n.onreadystatechange)?F(n,"onreadystatechange",function(t){return e.wrap(t,void 0,a)}):n.onreadystatechange=a,t.apply(this,arguments)}},o)}t.xhr&&"fetch"in j&&F(j,"fetch",function(t){return function(o,r){for(var n=new Array(arguments.length),a=0;a<n.length;++a)n[a]=arguments[a];var l,i=n[0],s="GET";"string"==typeof i?l=i:"Request"in j&&i instanceof j.Request?(l=i.url,i.method&&(s=i.method)):l=""+i,n[1]&&n[1].method&&(s=n[1].method);var c={method:s,url:l,status_code:null};return e.captureBreadcrumb({type:"http",category:"fetch",data:c}),t.apply(this,n).then(function(e){return c.status_code=e.status,e})}},o),t.dom&&this._hasDocument&&(R.addEventListener?(R.addEventListener("click",e._breadcrumbEventHandler("click"),!1),R.addEventListener("keypress",e._keypressEventHandler(),!1)):(R.attachEvent("onclick",e._breadcrumbEventHandler("click")),R.attachEvent("onkeypress",e._keypressEventHandler())));var a=j.chrome,l=!(a&&a.app&&a.app.runtime)&&j.history&&history.pushState&&history.replaceState;if(t.location&&l){var i=j.onpopstate;j.onpopstate=function(){var t=e._location.href;if(e._captureUrlChange(e._lastHref,t),i)return i.apply(this,arguments)};var s=function(t){return function(){var o=arguments.length>2?arguments[2]:void 0;return o&&e._captureUrlChange(e._lastHref,o+""),t.apply(this,arguments)}};F(history,"pushState",s,o),F(history,"replaceState",s,o)}if(t.console&&"console"in j&&console.log){var c=function(t,o){e.captureBreadcrumb({message:t,level:o.level,category:"console"})};h(["debug","info","warn","error","log"],function(e,t){T(console,t,c)})}},_restoreBuiltIns:function(){for(var e;this._wrappedBuiltIns.length;){var t=(e=this._wrappedBuiltIns.shift())[0],o=e[1],r=e[2];t[o]=r}},_drainPlugins:function(){var e=this;h(this._plugins,function(t,o){var r=o[0],n=o[1];r.apply(e,[e].concat(n))})},_parseDSN:function(e){var t=L.exec(e),o={},r=7;try{for(;r--;)o[k[r]]=t[r]||""}catch(t){throw new a("Invalid DSN: "+e)}if(o.pass&&!this._globalOptions.allowSecretKey)throw new a("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return o},_getGlobalServer:function(e){var t="//"+e.host+(e.port?":"+e.port:"");return e.protocol&&(t=e.protocol+":"+t),t},_handleOnErrorStackInfo:function(){this._ignoreOnError||this._handleStackInfo.apply(this,arguments)},_handleStackInfo:function(e,t){var o=this._prepareFrames(e,t);this._triggerEvent("handle",{stackInfo:e,options:t}),this._processException(e.name,e.message,e.url,e.lineno,o,t)},_prepareFrames:function(e,t){var o=this,r=[];if(e.stack&&e.stack.length&&(h(e.stack,function(t,n){var a=o._normalizeFrame(n,e.url);a&&r.push(a)}),t&&t.trimHeadFrames))for(var n=0;n<t.trimHeadFrames&&n<r.length;n++)r[n].in_app=!1;return r=r.slice(0,this._globalOptions.stackTraceLimit)},_normalizeFrame:function(e,t){var o={filename:e.url,lineno:e.line,colno:e.column,function:e.func||"?"};return e.url||(o.filename=t),o.in_app=!(this._globalOptions.includePaths.test&&!this._globalOptions.includePaths.test(o.filename)||/(Raven|TraceKit)\./.test(o.function)||/raven\.(min\.)?js$/.test(o.filename)),o},_processException:function(e,t,o,r,n,a){var l,i=(e?e+": ":"")+(t||"");if((!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(t)&&!this._globalOptions.ignoreErrors.test(i))&&(n&&n.length?(o=n[0].filename||o,n.reverse(),l={frames:n}):o&&(l={frames:[{filename:o,lineno:r,in_app:!0}]}),(!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(o))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(o)))){var s=b({exception:{values:[{type:e,value:t,stacktrace:l}]},culprit:o},a);this._send(s)}},_trimPacket:function(e){var t=this._globalOptions.maxMessageLength;if(e.message&&(e.message=m(e.message,t)),e.exception){var o=e.exception.values[0];o.value=m(o.value,t)}var r=e.request;return r&&(r.url&&(r.url=m(r.url,this._globalOptions.maxUrlLength)),r.Referer&&(r.Referer=m(r.Referer,this._globalOptions.maxUrlLength))),e.breadcrumbs&&e.breadcrumbs.values&&this._trimBreadcrumbs(e.breadcrumbs),e},_trimBreadcrumbs:function(e){for(var t,o,r,n=["to","from","url"],a=0;a<e.values.length;++a)if((o=e.values[a]).hasOwnProperty("data")&&s(o.data)&&!y(o.data)){r=b({},o.data);for(var l=0;l<n.length;++l)t=n[l],r.hasOwnProperty(t)&&r[t]&&(r[t]=m(r[t],this._globalOptions.maxUrlLength));e.values[a].data=r}},_getHttpData:function(){if(this._hasNavigator||this._hasDocument){var e={};return this._hasNavigator&&I.userAgent&&(e.headers={"User-Agent":navigator.userAgent}),this._hasDocument&&(R.location&&R.location.href&&(e.url=R.location.href),R.referrer&&(e.headers||(e.headers={}),e.headers.Referer=R.referrer)),e}},_resetBackoff:function(){this._backoffDuration=0,this._backoffStart=null},_shouldBackoff:function(){return this._backoffDuration&&O()-this._backoffStart<this._backoffDuration},_isRepeatData:function(e){var t=this._lastData;return!(!t||e.message!==t.message||e.culprit!==t.culprit)&&(e.stacktrace||t.stacktrace?w(e.stacktrace,t.stacktrace):!e.exception&&!t.exception||C(e.exception,t.exception))},_setBackoffState:function(e){if(!this._shouldBackoff()){var t=e.status;if(400===t||401===t||429===t){var o;try{o=e.getResponseHeader("Retry-After"),o=1e3*parseInt(o,10)}catch(e){}this._backoffDuration=o||(2*this._backoffDuration||1e3),this._backoffStart=O()}}},_send:function(e){var t=this._globalOptions,o={project:this._globalProject,logger:t.logger,platform:"javascript"},r=this._getHttpData();r&&(o.request=r),e.trimHeadFrames&&delete e.trimHeadFrames,(e=b(o,e)).tags=b(b({},this._globalContext.tags),e.tags),e.extra=b(b({},this._globalContext.extra),e.extra),e.extra["session:duration"]=O()-this._startTime,this._breadcrumbs&&this._breadcrumbs.length>0&&(e.breadcrumbs={values:[].slice.call(this._breadcrumbs,0)}),d(e.tags)&&delete e.tags,this._globalContext.user&&(e.user=this._globalContext.user),t.environment&&(e.environment=t.environment),t.release&&(e.release=t.release),t.serverName&&(e.server_name=t.serverName),f(t.dataCallback)&&(e=t.dataCallback(e)||e),e&&!d(e)&&(f(t.shouldSendCallback)&&!t.shouldSendCallback(e)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",e):"number"==typeof t.sampleRate?Math.random()<t.sampleRate&&this._sendProcessedPayload(e):this._sendProcessedPayload(e)))},_getUuid:function(){return S()},_sendProcessedPayload:function(e,t){var o=this,r=this._globalOptions;if(this.isSetup())if(e=this._trimPacket(e),this._globalOptions.allowDuplicates||!this._isRepeatData(e)){this._lastEventId=e.event_id||(e.event_id=this._getUuid()),this._lastData=e,this._logDebug("debug","Raven about to send:",e);var n={sentry_version:"7",sentry_client:"raven-js/"+this.VERSION,sentry_key:this._globalKey};this._globalSecret&&(n.sentry_secret=this._globalSecret);var a=e.exception&&e.exception.values[0];this.captureBreadcrumb({category:"sentry",message:a?(a.type?a.type+": ":"")+a.value:e.message,event_id:e.event_id,level:e.level||"error"});var l=this._globalEndpoint;(r.transport||this._makeRequest).call(this,{url:l,auth:n,data:e,options:r,onSuccess:function(){o._resetBackoff(),o._triggerEvent("success",{data:e,src:l}),t&&t()},onError:function(r){o._logDebug("error","Raven transport failed to send: ",r),r.request&&o._setBackoffState(r.request),o._triggerEvent("failure",{data:e,src:l}),r=r||new Error("Raven send failed (no additional details provided)"),t&&t(r)}})}else this._logDebug("warn","Raven dropped repeat event: ",e)},_makeRequest:function(e){var t=j.XMLHttpRequest&&new j.XMLHttpRequest;if(t&&("withCredentials"in t||"undefined"!=typeof XDomainRequest)){var o=e.url;"withCredentials"in t?t.onreadystatechange=function(){if(4===t.readyState)if(200===t.status)e.onSuccess&&e.onSuccess();else if(e.onError){var o=new Error("Sentry error code: "+t.status);o.request=t,e.onError(o)}}:(t=new XDomainRequest,o=o.replace(/^https?:/,""),e.onSuccess&&(t.onload=e.onSuccess),e.onError&&(t.onerror=function(){var o=new Error("Sentry error code: XDomainRequest");o.request=t,e.onError(o)})),t.open("POST",o+"?"+_(e.auth)),t.send(n(e.data))}},_logDebug:function(e){this._originalConsoleMethods[e]&&this.debug&&Function.prototype.apply.call(this._originalConsoleMethods[e],this._originalConsole,[].slice.call(arguments,1))},_mergeContext:function(e,t){u(t)?delete this._globalContext[e]:this._globalContext[e]=b(this._globalContext[e]||{},t)}},N.prototype.setUser=N.prototype.setUserContext,N.prototype.setReleaseContext=N.prototype.setRelease,e.exports=N}).call(this,o(1))},function(e,t,o){(function(t){var r=o(2),n={collectWindowErrors:!0,debug:!1},a="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{},l=[].slice,i="?",s=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function c(){return"undefined"==typeof document||null==document.location?"":document.location.href}n.report=function(){var e,t,o=[],u=null,f=null,p=null;function d(e,t){var r=null;if(!t||n.collectWindowErrors){for(var a in o)if(o.hasOwnProperty(a))try{o[a].apply(null,[e].concat(l.call(arguments,2)))}catch(e){r=e}if(r)throw r}}function h(t,o,a,l,u){if(p)n.computeStackTrace.augmentStackTraceWithInitialElement(p,o,a,t),b();else if(u&&r.isError(u))d(n.computeStackTrace(u),!0);else{var f,h={url:o,line:a,column:l},m=void 0,y=t;if("[object String]"==={}.toString.call(t))(f=t.match(s))&&(m=f[1],y=f[2]);h.func=i,d({name:m,message:y,url:c(),stack:[h]},!0)}return!!e&&e.apply(this,arguments)}function b(){var e=p,t=u;u=null,p=null,f=null,d.apply(null,[e,!1].concat(t))}function m(e,t){var o=l.call(arguments,1);if(p){if(f===e)return;b()}var r=n.computeStackTrace(e);if(p=r,f=e,u=o,setTimeout(function(){f===e&&b()},r.incomplete?2e3:0),!1!==t)throw e}return m.subscribe=function(r){t||(e=a.onerror,a.onerror=h,t=!0),o.push(r)},m.unsubscribe=function(e){for(var t=o.length-1;t>=0;--t)o[t]===e&&o.splice(t,1)},m.uninstall=function(){t&&(a.onerror=e,t=!1,e=void 0),o=[]},m}(),n.computeStackTrace=function(){function e(e){if(void 0!==e.stack&&e.stack){for(var t,o,r,n=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,a=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,l=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,s=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,u=/\((\S*)(?::(\d+))(?::(\d+))\)/,f=e.stack.split("\n"),p=[],d=(/^(.*) is undefined$/.exec(e.message),0),h=f.length;d<h;++d){if(o=n.exec(f[d])){var b=o[2]&&0===o[2].indexOf("native");o[2]&&0===o[2].indexOf("eval")&&(t=u.exec(o[2]))&&(o[2]=t[1],o[3]=t[2],o[4]=t[3]),r={url:b?null:o[2],func:o[1]||i,args:b?[o[2]]:[],line:o[3]?+o[3]:null,column:o[4]?+o[4]:null}}else if(o=l.exec(f[d]))r={url:o[2],func:o[1]||i,args:[],line:+o[3],column:o[4]?+o[4]:null};else{if(!(o=a.exec(f[d])))continue;o[3]&&o[3].indexOf(" > eval")>-1&&(t=s.exec(o[3]))?(o[3]=t[1],o[4]=t[2],o[5]=null):0!==d||o[5]||void 0===e.columnNumber||(p[0].column=e.columnNumber+1),r={url:o[3],func:o[1]||i,args:o[2]?o[2].split(","):[],line:o[4]?+o[4]:null,column:o[5]?+o[5]:null}}!r.func&&r.line&&(r.func=i),p.push(r)}return p.length?{name:e.name,message:e.message,url:c(),stack:p}:null}}function t(e,t,o,r){var n={url:t,line:o};if(n.url&&n.line){if(e.incomplete=!1,n.func||(n.func=i),e.stack.length>0&&e.stack[0].url===n.url){if(e.stack[0].line===n.line)return!1;if(!e.stack[0].line&&e.stack[0].func===n.func)return e.stack[0].line=n.line,!1}return e.stack.unshift(n),e.partial=!0,!0}return e.incomplete=!0,!1}function o(e,a){for(var l,s,u=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,f=[],p={},d=!1,h=o.caller;h&&!d;h=h.caller)if(h!==r&&h!==n.report){if(s={url:null,func:i,line:null,column:null},h.name?s.func=h.name:(l=u.exec(h.toString()))&&(s.func=l[1]),void 0===s.func)try{s.func=l.input.substring(0,l.input.indexOf("{"))}catch(e){}p[""+h]?d=!0:p[""+h]=!0,f.push(s)}a&&f.splice(0,a);var b={name:e.name,message:e.message,url:c(),stack:f};return t(b,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),b}function r(t,r){var a=null;r=null==r?0:+r;try{if(a=e(t))return a}catch(e){if(n.debug)throw e}try{if(a=o(t,r+1))return a}catch(e){if(n.debug)throw e}return{name:t.name,message:t.message,url:c()}}return r.augmentStackTraceWithInitialElement=t,r.computeStackTraceFromStackProp=e,r}(),e.exports=n}).call(this,o(1))},function(e,t){function o(e,t){for(var o=0;o<e.length;++o)if(e[o]===t)return o;return-1}function r(e,t){var r=[],n=[];return null==t&&(t=function(e,t){return r[0]===t?"[Circular ~]":"[Circular ~."+n.slice(0,o(r,t)).join(".")+"]"}),function(a,l){if(r.length>0){var i=o(r,this);~i?r.splice(i+1):r.push(this),~i?n.splice(i,1/0,a):n.push(a),~o(r,l)&&(l=t.call(this,a,l))}else r.push(l);return null==e?l instanceof Error?function(e){var t={stack:e.stack,message:e.message,name:e.name};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}(l):l:e.call(this,a,l)}}(e.exports=function(e,t,o,n){return JSON.stringify(e,r(t,n),o)}).getSerialize=r},function(e,t){function o(e){this.name="RavenConfigError",this.message=e}o.prototype=new Error,o.prototype.constructor=o,e.exports=o},function(e,t){e.exports={wrapMethod:function(e,t,o){var r=e[t],n=e;if(t in e){var a="warn"===t?"warning":t;e[t]=function(){var e=[].slice.call(arguments),l=""+e.join(" "),i={level:a,logger:"console",extra:{arguments:e}};"assert"===t?!1===e[0]&&(l="Assertion failed: "+(e.slice(1).join(" ")||"console.assert"),i.extra.arguments=e.slice(1),o&&o(l,i)):o&&o(l,i),r&&Function.prototype.apply.call(r,n,e)}}}}},function(e,t,o){"use strict";o.r(t);var r=o(0),n=o.n(r),a=window.leadinConfig,l=a.adminUrl,i=a.ajaxUrl,s=a.env,c=a.hubspotBaseUrl,u=a.leadinPluginVersion,f=a.plugins,p=a.phpVersion,d=a.portalId,h=a.theme,b=a.wpVersion,m=window.leadinI18n;var y=n.a;function g(e,t){jQuery("#toplevel_page_leadin").find("li").last().before('<li><a href="'.concat(t,'" target="_blank">').concat(e,"</a></li>"))}function v(){var e="".concat(c,"/chatflows/").concat(d),t="".concat(c,"/email/").concat(d);g(m.chatflows,e),g(m.email,t)}function _(e,t){for(var o=0;o<t.length;o++){var r=t[o];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function S(){try{if(window.localStorage.LEADIN_DEBUG){for(var e,t=arguments.length,o=new Array(t),r=0;r<t;r++)o[r]=arguments[r];o.unshift("[Leadin]"),(e=console).log.apply(e,o)}}catch(e){}}var x={iframe:"#leadin-iframe",allMenuButtons:".toplevel_page_leadin > a, .toplevel_page_leadin > ul > li > a",subMenuButtons:".toplevel_page_leadin > ul > li"},C=new(function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.bus=jQuery({})}var t,o,r;return t=e,(o=[{key:"trigger",value:function(){var e;(e=this.bus).trigger.apply(e,arguments)}},{key:"on",value:function(e,t){this.bus.on(e,y.wrap(t))}}])&&_(t.prototype,o),r&&_(t,r),e}()),w=[];function E(e){S("Posting message"),S(JSON.stringify(e)),jQuery(x.iframe)[0].contentWindow.postMessage(JSON.stringify(e),c)}function F(e,t){t||(t="Message Received");var o=Object.assign({},e);o.response=t,E(o)}function T(e){S("Received message"),S(JSON.stringify(e)),e.response&&e._callbackId?function(e){w[e._callbackId-1](e.response)}(e):Object.keys(e).forEach(function(t){C.trigger(t,[e[t],F.bind(null,e)])})}function k(e){if(e.origin===c)try{T(JSON.parse(e.data))}catch(e){}}function L(e,t,o,r,n){var a={url:"".concat(i,"?action=").concat(e),method:t,contentType:"application/json",success:"function"==typeof r?y.wrap(function(e){return r(JSON.parse(e))}):void 0,error:y.wrap(function(e){var t;try{t=JSON.parse(e.responseText).error}catch(o){t=e.responseText}y.captureMessage("AJAX request failed with code ".concat(e.status,": ").concat(t)),"function"==typeof n&&n()})};o&&(a.data=JSON.stringify(o)),jQuery.ajax(a)}function O(e,t,o,r){return L(e,"POST",t,o,r)}function j(e,t,o){return L(e,"GET",null,t,o)}var R,I=function(){return j("leadin_get_portal")},B=!1;function N(){R=setTimeout(function(){I(function(e){e.portalId?location.reload(!0):B||N()},N)},5e3)}var z=O.bind(null,"leadin_disconnect_ajax",{}),D=j.bind(null,"leadin_get_domain"),M=j.bind(null,"leadin_mark_outdated");function U(e){return function(e,t){C.on(e,function(){for(var e=arguments.length,o=new Array(e),r=0;r<e;r++)o[r]=arguments[r];t.apply(null,o.slice(1))})}.bind(null,e)}var P=U("leadin_clear_query_param"),H=U("leadin_connect_portal"),A=U("leadin_disable_navigation"),q=U("leadin_disconnect_portal"),J=U("leadin_enter_fullscreen"),W=U("leadin_exit_fullscreen"),K=U("leadin_get_assets_payload"),$=U("leadin_get_wp_domain"),Q=U("leadin_init_navigation"),X=U("leadin_interframe_ready"),G=U("leadin_mark_outdated"),V=U("leadin_page_reload"),Z=U("leadin_upgrade");function Y(e){!function(e,t,o,r,n){n||(n=500);var a=setTimeout(y.wrap(function(){y.captureMessage("LeadinWordpressPlugin postMessage response timeout on message key: ".concat(e)),r()}),n),l={};l[e]=t,l._callbackId=w.push(function(){clearTimeout(a),o.apply(void 0,arguments)}),E(l)}("leadin_change_route",e,null,function(){return location.reload(!0)})}function ee(){function e(){Y(window.location.search.match(/page=leadin_?(\w*)/)[1]),function(){jQuery(x.subMenuButtons).removeClass("current");var e=window.location.search.match(/\?page=leadin_?\w*/)[0];jQuery('a[href="admin.php'.concat(e,'"]')).parent().addClass("current")}()}window.addEventListener("popstate",e),jQuery(x.allMenuButtons).click(function(){event.metaKey||event.altKey||event.shiftKey||(window.history.pushState(null,null,jQuery(this).attr("href")),e(),event.preventDefault())})}var te={"genesis-sample":{formsStyle:{fontFamily:"Source Sans Pro",labelTextColor:"#333333",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#0073e5"},chatStyle:{accentColor:"#0073e5"},onScrollLeadFlowStyle:{color:"#0073e5"},onExitLeadFlowStyle:{color:"#0073e5"}},"academy-pro":{formsStyle:{fontFamily:"PT Sans",labelTextColor:"#222222",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#e22c2f"},chatStyle:{accentColor:"#e22c2f"},onScrollLeadFlowStyle:{color:"#e22c2f"},onExitLeadFlowStyle:{color:"#e22c2f"}},"agency-pro":{formsStyle:{fontFamily:"EB Garamond",labelTextColor:"#666666",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#d7c603"},chatStyle:{accentColor:"#d7c603"},onScrollLeadFlowStyle:{color:"#d7c603"},onExitLeadFlowStyle:{color:"#d7c603"}},"agentpress-pro":{formsStyle:{fontFamily:"Roboto",labelTextColor:"#1a212b",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#d23836"},chatStyle:{accentColor:"#d23836"},onScrollLeadFlowStyle:{color:"#d23836"},onExitLeadFlowStyle:{color:"#d23836"}},"altitude-pro":{formsStyle:{fontFamily:"Ek Mukta",labelTextColor:"#000000",labelTextSize:"20px",submitFontColor:"#ffffff",submitColor:"#079bc4"},chatStyle:{accentColor:"#079bc4"},onScrollLeadFlowStyle:{color:"#079bc4"},onExitLeadFlowStyle:{color:"#079bc4"}},"ambiance-pro":{formsStyle:{fontFamily:"Merriweather",labelTextColor:"#333333",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#e12727"},chatStyle:{accentColor:"#e12727"},onScrollLeadFlowStyle:{color:"#e12727"},onExitLeadFlowStyle:{color:"#e12727"}},"atmosphere-pro":{formsStyle:{fontFamily:"Lato",labelTextColor:"#333333",labelTextSize:"20px",submitFontColor:"#ffffff",submitColor:"#333333"},chatStyle:{accentColor:"#333333"},onScrollLeadFlowStyle:{color:"#333333"},onExitLeadFlowStyle:{color:"#333333"}},"author-pro":{formsStyle:{fontFamily:"Lato",labelTextColor:"#000000",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#000000"},chatStyle:{accentColor:"#000000"},onScrollLeadFlowStyle:{color:"#000000"},onExitLeadFlowStyle:{color:"#000000"}},"authority-pro":{formsStyle:{fontFamily:"Libre Baskerville",labelTextColor:"#333333",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#000cff"},chatStyle:{accentColor:"#000cff"},onScrollLeadFlowStyle:{color:"#000cff"},onExitLeadFlowStyle:{color:"#000cff"}},"beautiful-pro":{formsStyle:{fontFamily:"Lato",labelTextColor:"#666666",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#e5554e"},chatStyle:{accentColor:"#e5554e"},onScrollLeadFlowStyle:{color:"#e5554e"},onExitLeadFlowStyle:{color:"#e5554e"}},"breakthrough-pro":{formsStyle:{fontFamily:"Alegreya Sans",labelTextColor:"#4e4756",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#4a4f9b"},chatStyle:{accentColor:"#4a4f9b"},onScrollLeadFlowStyle:{color:"#4a4f9b"},onExitLeadFlowStyle:{color:"#4a4f9b"}},"cafe-pro":{formsStyle:{fontFamily:"Crimson Text",labelTextColor:"#000000",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#000000"},chatStyle:{accentColor:"#000000"},onScrollLeadFlowStyle:{color:"#000000"},onExitLeadFlowStyle:{color:"#000000"}},"daily-dish-pro":{formsStyle:{fontFamily:"Cormorant",labelTextColor:"#000000",labelTextSize:"20px",submitFontColor:"#ffffff",submitColor:"#d9037f"},chatStyle:{accentColor:"#d9037f"},onScrollLeadFlowStyle:{color:"#d9037f"},onExitLeadFlowStyle:{color:"#d9037f"}},"digital-pro":{formsStyle:{fontFamily:"Lora",labelTextColor:"#5b5e5e",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#e85555"},chatStyle:{accentColor:"#e85555"},onScrollLeadFlowStyle:{color:"#e85555"},onExitLeadFlowStyle:{color:"#e85555"}},"education-pro":{formsStyle:{fontFamily:"Roboto Condensed",labelTextColor:"#444444",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#78a7c8"},chatStyle:{accentColor:"#78a7c8"},onScrollLeadFlowStyle:{color:"#78a7c8"},onExitLeadFlowStyle:{color:"#78a7c8"}},"eleven40-pro":{formsStyle:{fontFamily:"Lora",labelTextColor:"#000000",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#ed702b"},chatStyle:{accentColor:"#ed702b"},onScrollLeadFlowStyle:{color:"#ed702b"},onExitLeadFlowStyle:{color:"#ed702b"}},"enterprise-pro":{formsStyle:{fontFamily:"Lato",labelTextColor:"#777777",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#31b2ed"},chatStyle:{accentColor:"#31b2ed"},onScrollLeadFlowStyle:{color:"#31b2ed"},onExitLeadFlowStyle:{color:"#31b2ed"}},"essence-pro":{formsStyle:{fontFamily:"Alegreya Sans",labelTextColor:"#333333",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#be8100"},chatStyle:{accentColor:"#be8100"},onScrollLeadFlowStyle:{color:"#be8100"},onExitLeadFlowStyle:{color:"#be8100"}},"executive-pro":{formsStyle:{fontFamily:"Open Sans",labelTextColor:"#222222",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#64c9ea"},chatStyle:{accentColor:"#64c9ea"},onScrollLeadFlowStyle:{color:"#64c9ea"},onExitLeadFlowStyle:{color:"#64c9ea"}},"generate-pro":{formsStyle:{fontFamily:"Source Sans Pro",labelTextColor:"#222222",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#eb232f"},chatStyle:{accentColor:"#eb232f"},onScrollLeadFlowStyle:{color:"#eb232f"},onExitLeadFlowStyle:{color:"#eb232f"}},"infinity-pro":{formsStyle:{fontFamily:"Cormorant Garamond",labelTextColor:"#000000",labelTextSize:"22px",submitFontColor:"#ffffff",submitColor:"#d43c67"},chatStyle:{accentColor:"#d43c67"},onScrollLeadFlowStyle:{color:"#d43c67"},onExitLeadFlowStyle:{color:"#d43c67"}},"interior-pro":{formsStyle:{fontFamily:"Lora",labelTextColor:"#777777",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#009092"},chatStyle:{accentColor:"#009092"},onScrollLeadFlowStyle:{color:"#009092"},onExitLeadFlowStyle:{color:"#009092"}},"lifestyle-pro":{formsStyle:{fontFamily:"Droid Sans",labelTextColor:"#767673",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#27968b"},chatStyle:{accentColor:"#27968b"},onScrollLeadFlowStyle:{color:"#27968b"},onExitLeadFlowStyle:{color:"#27968b"}},"magazine-pro":{formsStyle:{fontFamily:"Roboto",labelTextColor:"#222222",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#008285"},chatStyle:{accentColor:"#008285"},onScrollLeadFlowStyle:{color:"#008285"},onExitLeadFlowStyle:{color:"#008285"}},"metro-pro":{formsStyle:{fontFamily:"Helvetica Neue",labelTextColor:"#222222",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#f96e5b"},chatStyle:{accentColor:"#f96e5b"},onScrollLeadFlowStyle:{color:"#f96e5b"},onExitLeadFlowStyle:{color:"#f96e5b"}},"minimum-pro":{formsStyle:{fontFamily:"Roboto Slab",labelTextColor:"#333333",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#0ebfe9"},chatStyle:{accentColor:"#0ebfe9"},onScrollLeadFlowStyle:{color:"#0ebfe9"},onExitLeadFlowStyle:{color:"#0ebfe9"}},"modern-studio-pro":{formsStyle:{fontFamily:"Lato",labelTextColor:"#000000",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#000000"},chatStyle:{accentColor:"#000000"},onScrollLeadFlowStyle:{color:"#000000"},onExitLeadFlowStyle:{color:"#000000"}},"monochrome-pro":{formsStyle:{fontFamily:"Muli",labelTextColor:"#000000",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#000000"},chatStyle:{accentColor:"#000000"},onScrollLeadFlowStyle:{color:"#000000"},onExitLeadFlowStyle:{color:"#000000"}},"news-pro":{formsStyle:{fontFamily:"Raleway",labelTextColor:"#666666",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#ff0000"},chatStyle:{accentColor:"#ff0000"},onScrollLeadFlowStyle:{color:"#ff0000"},onExitLeadFlowStyle:{color:"#ff0000"}},"no-sidebar-pro":{formsStyle:{fontFamily:"Lato",labelTextColor:"#333333",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#333333"},chatStyle:{accentColor:"#333333"},onScrollLeadFlowStyle:{color:"#333333"},onExitLeadFlowStyle:{color:"#333333"}},"outfitter-pro":{formsStyle:{fontFamily:"Noto Sans",labelTextColor:"#546e7a",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#000000"},chatStyle:{accentColor:"#000000"},onScrollLeadFlowStyle:{color:"#000000"},onExitLeadFlowStyle:{color:"#000000"}},"outreach-pro":{formsStyle:{fontFamily:"Lato",labelTextColor:"#333333",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#6ab446"},chatStyle:{accentColor:"#6ab446"},onScrollLeadFlowStyle:{color:"#6ab446"},onExitLeadFlowStyle:{color:"#6ab446"}},"parallax-pro":{formsStyle:{fontFamily:"Cormorant Garamond",labelTextColor:"#000000",labelTextSize:"22px",submitFontColor:"#ffffff",submitColor:"#00a0af"},chatStyle:{accentColor:"#00a0af"},onScrollLeadFlowStyle:{color:"#00a0af"},onExitLeadFlowStyle:{color:"#00a0af"}},"revolution-pro":{formsStyle:{fontFamily:"Noto Serif SC",labelTextColor:"#000000",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#008080"},chatStyle:{accentColor:"#008080"},onScrollLeadFlowStyle:{color:"#008080"},onExitLeadFlowStyle:{color:"#008080"}},"sixteen-nine-pro":{formsStyle:{fontFamily:"Roboto",labelTextColor:"#000000",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#1dbec0"},chatStyle:{accentColor:"#1dbec0"},onScrollLeadFlowStyle:{color:"#1dbec0"},onExitLeadFlowStyle:{color:"#1dbec0"}},"smart-passive-income-pro":{formsStyle:{fontFamily:"Roboto",labelTextColor:"#333333",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#0e763c"},chatStyle:{accentColor:"#0e763c"},onScrollLeadFlowStyle:{color:"#0e763c"},onExitLeadFlowStyle:{color:"#0e763c"}},"wellness-pro":{formsStyle:{fontFamily:"Open Sans",labelTextColor:"#000000",labelTextSize:"16px",submitFontColor:"#ffffff",submitColor:"#5da44f"},chatStyle:{accentColor:"#5da44f"},onScrollLeadFlowStyle:{color:"#5da44f"},onExitLeadFlowStyle:{color:"#5da44f"}},"workstation-pro":{formsStyle:{fontFamily:"Baskerville",labelTextColor:"#222222",labelTextSize:"18px",submitFontColor:"#ffffff",submitColor:"#ff4800"},chatStyle:{accentColor:"#ff4800"},onScrollLeadFlowStyle:{color:"#ff4800"},onExitLeadFlowStyle:{color:"#ff4800"}}};X(function(e,t){t("Interframe Ready")}),H(function(e,t){!function(e,t,o){O("leadin_registration_ajax",{portalId:e},t,o)}(e,function(){clearTimeout(R),B=!0,t({success:!0})},t.bind(null,{success:!1}))}),q(function(e,t){z(t.bind(null,{success:!0}),t.bind(null,{success:!1}))}),G(function(e,t){M(t)}),Z(function(e,t){t(),location.href="".concat(l,"plugins.php")}),V(function(e,t){t(),window.location.reload(!0)}),Q(function(e,t){t(),ee()}),A(function(e,t){t(),jQuery(x.allMenuButtons).off("click")}),P(function(e,t){t();var o=window.location.toString();o.indexOf("?")>0&&(o=o.substring(0,o.indexOf("?")));var r="".concat(o,"?page=leadin");window.history.pushState({},"",r)}),$(function(e,t){D(function(e){e.domain&&t(e.domain)})}),K(function(e,t){t({payload:te[h]})}),J(function(e,t){t(),jQuery(x.iframe).addClass("leadin-iframe-fullscreen")}),W(function(e,t){t(),jQuery(x.iframe).removeClass("leadin-iframe-fullscreen")}),"prod"===s&&(n.a.config("https://[email protected]/1",{instrument:{tryCatch:!1}}).install(),n.a.setTagsContext({leadin:u,php:p,wordpress:b}),n.a.setUserContext({hub:d,plugins:Object.keys(f).map(function(e){return"".concat(e,"#").concat(f[e].Version)}).join(",")})),y.context(function(){window.addEventListener("message",k),-1!==window.location.search.indexOf("page=leadin")&&(d||N()),jQuery(document).ready(v)})}]);
    22//# sourceMappingURL=leadin.js.map
  • leadin/trunk/scripts/leadin.js.map

    r2106268 r2112768  
    1 {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/raven-js/src/singleton.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/raven-js/src/utils.js","webpack:///./node_modules/raven-js/src/raven.js","webpack:///./node_modules/raven-js/vendor/TraceKit/tracekit.js","webpack:///./node_modules/raven-js/vendor/json-stringify-safe/stringify.js","webpack:///./node_modules/raven-js/src/configError.js","webpack:///./node_modules/raven-js/src/console.js","webpack:///./js/constants/leadinConfig.js","webpack:///./js/lib/Raven.js","webpack:///./js/chatflows.js","webpack:///./js/utils.js","webpack:///./js/constants/selectors.js","webpack:///./js/lib/Interframe.js","webpack:///./js/lib/EventBus.js","webpack:///./js/api/wordpressApi.js","webpack:///./js/api/hubspotPluginApi.js","webpack:///./js/navigation.js","webpack:///./js/constants/themes.js","webpack:///./js/handlers.js","webpack:///./js/fullscreen.js","webpack:///./js/app.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","global","RavenConstructor","_window","window","self","_Raven","Raven","noConflict","afterLoad","g","this","Function","e","isUndefined","what","isString","toString","supportsErrorEvent","ErrorEvent","each","obj","callback","j","length","hasKey","htmlElementAsString","elem","className","classes","attr","out","tagName","push","toLowerCase","id","split","attrWhitelist","getAttribute","join","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","filename","lineno","colno","isObject","isError","Error","isErrorEvent","isFunction","isEmptyObject","_","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","truncate","str","max","substr","objectFrozen","isFrozen","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","urlencode","pairs","encodeURIComponent","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","Math","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","values","type","stacktrace","parseUrl","url","match","query","fragment","protocol","host","path","relative","fill","replacement","track","orig","TraceKit","stringify","RavenConfigError","utils","wrapConsoleMethod","wrapMethod","dsnKeys","dsnPattern","now","Date","_document","document","_navigator","navigator","keepOriginalCallback","method","_hasJSON","JSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","logger","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","collectWindowErrors","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","console","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","location","_lastHref","href","_resetBackoff","VERSION","debug","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","xhr","dom","instrumentDefaults","tryCatch","install","isSetup","report","subscribe","_handleOnErrorStackInfo","apply","arguments","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","func","args","undefined","wrap","_before","__raven__","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","__inner__","uninstall","_restoreBuiltIns","ex","isNotError","isNotErrorEvent","isErrorEventWithoutError","error","captureMessage","trimHeadFrames","stack","computeStackTrace","_handleStackInfo","msg","test","message","initialCall","fileurl","fingerprint","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","result","shift","addPlugin","plugin","pluginArgs","slice","setUserContext","setExtraContext","extra","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","release","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","RavenConfig","showReportDialog","eventId","encode","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","setTimeout","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","wrappedBuiltIns","wrapTimeFn","fn","Array","originalCallback","wrapEventTarget","proto","capture","secure","handleEvent","err","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","indexOf","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","addEventListener","attachEvent","chrome","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","level","builtin","installer","concat","exec","allowSecretKey","port","stackInfo","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","line","column","function","prefixedMessage","exception","culprit","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","headers","User-Agent","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","_setBackoffState","retry","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sendProcessedPayload","_getUuid","allowDuplicates","event_id","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","opts","XDomainRequest","onload","onerror","open","send","setUser","setReleaseContext","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastExceptionStack","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","augmentStackTraceWithInitialElement","processLastException","groups","_lastExceptionStack","_lastArgs","rethrow","incomplete","handler","unsubscribe","splice","computeStackTraceFromStackProp","submatch","parts","element","gecko","winjs","geckoEval","chromeEval","lines","isNative","columnNumber","initial","unshift","partial","computeStackTraceByWalkingCallerChain","depth","item","functionName","funcs","recursion","curr","caller","input","substring","sourceURL","fileName","lineNumber","description","haystack","needle","serializer","replacer","cycleReplacer","keys","thisPos","Infinity","stringifyError","spaces","getSerialize","constructor","originalConsoleLevel","originalConsole","sentryLevel","leadinConfig","adminUrl","ajaxUrl","env","hubspotBaseUrl","leadinPluginVersion","plugins","phpVersion","portalId","theme","wpVersion","i18n","leadinI18n","initChatflows","leadinMenu","getElementById","firstSubMenu","querySelector","chatflowsUrl","chatflowsHtml","chatflows","insertAdjacentHTML","localStorage","LEADIN_DEBUG","_console","_len","_key","domElements","iframe","allMenuButtons","subMenuButtons","eventBus","EventBus","_classCallCheck","bus","jQuery","_this$bus","trigger","event","on","callbacks","postMessageObject","contentWindow","postMessage","reply","newMessage","assign","handleMessage","_callbackId","handleResponse","forEach","handleMessageEvent","origin","makeRequest","action","payload","success","ajaxPayload","contentType","jqXHR","responseText","ajax","post","portalPollingTimeout","getPortal","stopPortalPolling","startPortalIdPolling","reload","disconnect","getDomain","markAsOutdated","createHandler","onClearQueryParam","onConnect","onDisableNavigation","onDisconnect","onEnterFullScreen","onExitFullScreen","onGetAssetsPayload","onGetDomain","onInitNavigation","onInterframeReady","onMarkAsOutdated","onPageReload","onUpgrade","changeRoute","route","onResponse","onTimeout","timeoutId","initNavigation","handleNavigation","search","removeClass","pageParam","parent","addClass","setSelectedMenuItem","click","metaKey","altKey","shiftKey","preventDefault","themes","genesis-sample","formsStyle","fontFamily","labelTextColor","labelTextSize","submitFontColor","submitColor","chatStyle","accentColor","onScrollLeadFlowStyle","color","onExitLeadFlowStyle","academy-pro","agency-pro","agentpress-pro","altitude-pro","ambiance-pro","atmosphere-pro","author-pro","authority-pro","beautiful-pro","breakthrough-pro","cafe-pro","daily-dish-pro","digital-pro","education-pro","eleven40-pro","enterprise-pro","essence-pro","executive-pro","generate-pro","infinity-pro","interior-pro","lifestyle-pro","magazine-pro","metro-pro","minimum-pro","modern-studio-pro","monochrome-pro","news-pro","no-sidebar-pro","outfitter-pro","outreach-pro","parallax-pro","revolution-pro","sixteen-nine-pro","smart-passive-income-pro","wellness-pro","workstation-pro","connect","off","currentWindowLocation","newWindowLocation","domain","leadin","php","wordpress","hub","map","Version","ready"],"mappings":"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","file":"leadin.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 \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\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.l = 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// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n  typeof window !== 'undefined'\n    ? window\n    : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n  _window.Raven = _Raven;\n  return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var _window =\n  typeof window !== 'undefined'\n    ? window\n    : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n  return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n  switch ({}.toString.call(value)) {\n    case '[object Error]':\n      return true;\n    case '[object Exception]':\n      return true;\n    case '[object DOMException]':\n      return true;\n    default:\n      return value instanceof Error;\n  }\n}\n\nfunction isErrorEvent(value) {\n  return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isUndefined(what) {\n  return what === void 0;\n}\n\nfunction isFunction(what) {\n  return typeof what === 'function';\n}\n\nfunction isString(what) {\n  return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isEmptyObject(what) {\n  for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars\n  return true;\n}\n\nfunction supportsErrorEvent() {\n  try {\n    new ErrorEvent(''); // eslint-disable-line no-new\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction wrappedCallback(callback) {\n  function dataCallback(data, original) {\n    var normalizedData = callback(data) || data;\n    if (original) {\n      return original(normalizedData) || normalizedData;\n    }\n    return normalizedData;\n  }\n\n  return dataCallback;\n}\n\nfunction each(obj, callback) {\n  var i, j;\n\n  if (isUndefined(obj.length)) {\n    for (i in obj) {\n      if (hasKey(obj, i)) {\n        callback.call(null, i, obj[i]);\n      }\n    }\n  } else {\n    j = obj.length;\n    if (j) {\n      for (i = 0; i < j; i++) {\n        callback.call(null, i, obj[i]);\n      }\n    }\n  }\n}\n\nfunction objectMerge(obj1, obj2) {\n  if (!obj2) {\n    return obj1;\n  }\n  each(obj2, function(key, value) {\n    obj1[key] = value;\n  });\n  return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n  if (!Object.isFrozen) {\n    return false;\n  }\n  return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n  return !max || str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n  return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n  // Combine an array of regular expressions and strings into one large regexp\n  // Be mad.\n  var sources = [],\n    i = 0,\n    len = patterns.length,\n    pattern;\n\n  for (; i < len; i++) {\n    pattern = patterns[i];\n    if (isString(pattern)) {\n      // If it's a string, we need to escape it\n      // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n      sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n    } else if (pattern && pattern.source) {\n      // If it's a regexp already, we want to extract the source\n      sources.push(pattern.source);\n    }\n    // Intentionally skip other cases\n  }\n  return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n  var pairs = [];\n  each(o, function(key, value) {\n    pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n  });\n  return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not <a/> href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n  var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n  if (!match) return {};\n\n  // coerce to undefined values to empty string so we don't get 'undefined'\n  var query = match[6] || '';\n  var fragment = match[8] || '';\n  return {\n    protocol: match[2],\n    host: match[4],\n    path: match[5],\n    relative: match[5] + query + fragment // everything minus origin\n  };\n}\nfunction uuid4() {\n  var crypto = _window.crypto || _window.msCrypto;\n\n  if (!isUndefined(crypto) && crypto.getRandomValues) {\n    // Use window.crypto API if available\n    // eslint-disable-next-line no-undef\n    var arr = new Uint16Array(8);\n    crypto.getRandomValues(arr);\n\n    // set 4 in byte 7\n    arr[3] = (arr[3] & 0xfff) | 0x4000;\n    // set 2 most significant bits of byte 9 to '10'\n    arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n    var pad = function(num) {\n      var v = num.toString(16);\n      while (v.length < 4) {\n        v = '0' + v;\n      }\n      return v;\n    };\n\n    return (\n      pad(arr[0]) +\n      pad(arr[1]) +\n      pad(arr[2]) +\n      pad(arr[3]) +\n      pad(arr[4]) +\n      pad(arr[5]) +\n      pad(arr[6]) +\n      pad(arr[7])\n    );\n  } else {\n    // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n    return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n      var r = (Math.random() * 16) | 0,\n        v = c === 'x' ? r : (r & 0x3) | 0x8;\n      return v.toString(16);\n    });\n  }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n  /* eslint no-extra-parens:0*/\n  var MAX_TRAVERSE_HEIGHT = 5,\n    MAX_OUTPUT_LEN = 80,\n    out = [],\n    height = 0,\n    len = 0,\n    separator = ' > ',\n    sepLength = separator.length,\n    nextStr;\n\n  while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n    nextStr = htmlElementAsString(elem);\n    // bail out if\n    // - nextStr is the 'html' element\n    // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n    //   (ignore this limit if we are on the first iteration)\n    if (\n      nextStr === 'html' ||\n      (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n    ) {\n      break;\n    }\n\n    out.push(nextStr);\n\n    len += nextStr.length;\n    elem = elem.parentNode;\n  }\n\n  return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n  var out = [],\n    className,\n    classes,\n    key,\n    attr,\n    i;\n\n  if (!elem || !elem.tagName) {\n    return '';\n  }\n\n  out.push(elem.tagName.toLowerCase());\n  if (elem.id) {\n    out.push('#' + elem.id);\n  }\n\n  className = elem.className;\n  if (className && isString(className)) {\n    classes = className.split(/\\s+/);\n    for (i = 0; i < classes.length; i++) {\n      out.push('.' + classes[i]);\n    }\n  }\n  var attrWhitelist = ['type', 'name', 'title', 'alt'];\n  for (i = 0; i < attrWhitelist.length; i++) {\n    key = attrWhitelist[i];\n    attr = elem.getAttribute(key);\n    if (attr) {\n      out.push('[' + key + '=\"' + attr + '\"]');\n    }\n  }\n  return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n  return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n  if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n  ex1 = ex1.values[0];\n  ex2 = ex2.values[0];\n\n  if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n  return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n  if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n  var frames1 = stack1.frames;\n  var frames2 = stack2.frames;\n\n  // Exit early if frame count differs\n  if (frames1.length !== frames2.length) return false;\n\n  // Iterate through every frame; bail out if anything differs\n  var a, b;\n  for (var i = 0; i < frames1.length; i++) {\n    a = frames1[i];\n    b = frames2[i];\n    if (\n      a.filename !== b.filename ||\n      a.lineno !== b.lineno ||\n      a.colno !== b.colno ||\n      a['function'] !== b['function']\n    )\n      return false;\n  }\n  return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n  var orig = obj[name];\n  obj[name] = replacement(orig);\n  if (track) {\n    track.push([obj, name, orig]);\n  }\n}\n\nmodule.exports = {\n  isObject: isObject,\n  isError: isError,\n  isErrorEvent: isErrorEvent,\n  isUndefined: isUndefined,\n  isFunction: isFunction,\n  isString: isString,\n  isEmptyObject: isEmptyObject,\n  supportsErrorEvent: supportsErrorEvent,\n  wrappedCallback: wrappedCallback,\n  each: each,\n  objectMerge: objectMerge,\n  truncate: truncate,\n  objectFrozen: objectFrozen,\n  hasKey: hasKey,\n  joinRegExp: joinRegExp,\n  urlencode: urlencode,\n  uuid4: uuid4,\n  htmlTreeAsString: htmlTreeAsString,\n  htmlElementAsString: htmlElementAsString,\n  isSameException: isSameException,\n  isSameStacktrace: isSameStacktrace,\n  parseUrl: parseUrl,\n  fill: fill\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isObject = utils.isObject;\nvar isErrorEvent = utils.isErrorEvent;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n  dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n  return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n  typeof window !== 'undefined'\n    ? window\n    : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n  return isFunction(callback)\n    ? function(data) {\n        return callback(data, original);\n      }\n    : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n  this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n  // Raven can run in contexts where there's no document (react-native)\n  this._hasDocument = !isUndefined(_document);\n  this._hasNavigator = !isUndefined(_navigator);\n  this._lastCapturedException = null;\n  this._lastData = null;\n  this._lastEventId = null;\n  this._globalServer = null;\n  this._globalKey = null;\n  this._globalProject = null;\n  this._globalContext = {};\n  this._globalOptions = {\n    logger: 'javascript',\n    ignoreErrors: [],\n    ignoreUrls: [],\n    whitelistUrls: [],\n    includePaths: [],\n    collectWindowErrors: true,\n    maxMessageLength: 0,\n\n    // By default, truncates URL values to 250 chars\n    maxUrlLength: 250,\n    stackTraceLimit: 50,\n    autoBreadcrumbs: true,\n    instrument: true,\n    sampleRate: 1\n  };\n  this._ignoreOnError = 0;\n  this._isRavenInstalled = false;\n  this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n  // capture references to window.console *and* all its methods first\n  // before the console plugin has a chance to monkey patch\n  this._originalConsole = _window.console || {};\n  this._originalConsoleMethods = {};\n  this._plugins = [];\n  this._startTime = now();\n  this._wrappedBuiltIns = [];\n  this._breadcrumbs = [];\n  this._lastCapturedEvent = null;\n  this._keypressTimeout;\n  this._location = _window.location;\n  this._lastHref = this._location && this._location.href;\n  this._resetBackoff();\n\n  // eslint-disable-next-line guard-for-in\n  for (var method in this._originalConsole) {\n    this._originalConsoleMethods[method] = this._originalConsole[method];\n  }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n  // Hardcode version string so that raven source can be loaded directly via\n  // webpack (using a build step causes webpack #1617). Grunt verifies that\n  // this value matches package.json during build.\n  //   See: https://github.com/getsentry/raven-js/issues/465\n  VERSION: '3.19.1',\n\n  debug: false,\n\n  TraceKit: TraceKit, // alias to TraceKit\n\n  /*\n     * Configure Raven with a DSN and extra options\n     *\n     * @param {string} dsn The public Sentry DSN\n     * @param {object} options Set of global options [optional]\n     * @return {Raven}\n     */\n  config: function(dsn, options) {\n    var self = this;\n\n    if (self._globalServer) {\n      this._logDebug('error', 'Error: Raven has already been configured');\n      return self;\n    }\n    if (!dsn) return self;\n\n    var globalOptions = self._globalOptions;\n\n    // merge in options\n    if (options) {\n      each(options, function(key, value) {\n        // tags and extra are special and need to be put into context\n        if (key === 'tags' || key === 'extra' || key === 'user') {\n          self._globalContext[key] = value;\n        } else {\n          globalOptions[key] = value;\n        }\n      });\n    }\n\n    self.setDSN(dsn);\n\n    // \"Script error.\" is hard coded into browsers for errors that it can't read.\n    // this is the result of a script being pulled in from an external domain and CORS.\n    globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n    globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n    // join regexp rules into one big rule\n    globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n    globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n      ? joinRegExp(globalOptions.ignoreUrls)\n      : false;\n    globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n      ? joinRegExp(globalOptions.whitelistUrls)\n      : false;\n    globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n    globalOptions.maxBreadcrumbs = Math.max(\n      0,\n      Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n    ); // default and hard limit is 100\n\n    var autoBreadcrumbDefaults = {\n      xhr: true,\n      console: true,\n      dom: true,\n      location: true\n    };\n\n    var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n    if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n      autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n    } else if (autoBreadcrumbs !== false) {\n      autoBreadcrumbs = autoBreadcrumbDefaults;\n    }\n    globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n    var instrumentDefaults = {\n      tryCatch: true\n    };\n\n    var instrument = globalOptions.instrument;\n    if ({}.toString.call(instrument) === '[object Object]') {\n      instrument = objectMerge(instrumentDefaults, instrument);\n    } else if (instrument !== false) {\n      instrument = instrumentDefaults;\n    }\n    globalOptions.instrument = instrument;\n\n    TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n    // return for chaining\n    return self;\n  },\n\n  /*\n     * Installs a global window.onerror error handler\n     * to capture and report uncaught exceptions.\n     * At this point, install() is required to be called due\n     * to the way TraceKit is set up.\n     *\n     * @return {Raven}\n     */\n  install: function() {\n    var self = this;\n    if (self.isSetup() && !self._isRavenInstalled) {\n      TraceKit.report.subscribe(function() {\n        self._handleOnErrorStackInfo.apply(self, arguments);\n      });\n      if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n        self._instrumentTryCatch();\n      }\n\n      if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n      // Install all of the plugins\n      self._drainPlugins();\n\n      self._isRavenInstalled = true;\n    }\n\n    Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n    return this;\n  },\n\n  /*\n     * Set the DSN (can be called multiple time unlike config)\n     *\n     * @param {string} dsn The public Sentry DSN\n     */\n  setDSN: function(dsn) {\n    var self = this,\n      uri = self._parseDSN(dsn),\n      lastSlash = uri.path.lastIndexOf('/'),\n      path = uri.path.substr(1, lastSlash);\n\n    self._dsn = dsn;\n    self._globalKey = uri.user;\n    self._globalSecret = uri.pass && uri.pass.substr(1);\n    self._globalProject = uri.path.substr(lastSlash + 1);\n\n    self._globalServer = self._getGlobalServer(uri);\n\n    self._globalEndpoint =\n      self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n    // Reset backoff state since we may be pointing at a\n    // new project/server\n    this._resetBackoff();\n  },\n\n  /*\n     * Wrap code within a context so Raven can capture errors\n     * reliably across domains that is executed immediately.\n     *\n     * @param {object} options A specific set of options for this context [optional]\n     * @param {function} func The callback to be immediately executed within the context\n     * @param {array} args An array of arguments to be called with the callback [optional]\n     */\n  context: function(options, func, args) {\n    if (isFunction(options)) {\n      args = func || [];\n      func = options;\n      options = undefined;\n    }\n\n    return this.wrap(options, func).apply(this, args);\n  },\n\n  /*\n     * Wrap code within a context and returns back a new function to be executed\n     *\n     * @param {object} options A specific set of options for this context [optional]\n     * @param {function} func The function to be wrapped in a new context\n     * @param {function} func A function to call before the try/catch wrapper [optional, private]\n     * @return {function} The newly wrapped functions with a context\n     */\n  wrap: function(options, func, _before) {\n    var self = this;\n    // 1 argument has been passed, and it's not a function\n    // so just return it\n    if (isUndefined(func) && !isFunction(options)) {\n      return options;\n    }\n\n    // options is optional\n    if (isFunction(options)) {\n      func = options;\n      options = undefined;\n    }\n\n    // At this point, we've passed along 2 arguments, and the second one\n    // is not a function either, so we'll just return the second argument.\n    if (!isFunction(func)) {\n      return func;\n    }\n\n    // We don't wanna wrap it twice!\n    try {\n      if (func.__raven__) {\n        return func;\n      }\n\n      // If this has already been wrapped in the past, return that\n      if (func.__raven_wrapper__) {\n        return func.__raven_wrapper__;\n      }\n    } catch (e) {\n      // Just accessing custom props in some Selenium environments\n      // can cause a \"Permission denied\" exception (see raven-js#495).\n      // Bail on wrapping and return the function as-is (defers to window.onerror).\n      return func;\n    }\n\n    function wrapped() {\n      var args = [],\n        i = arguments.length,\n        deep = !options || (options && options.deep !== false);\n\n      if (_before && isFunction(_before)) {\n        _before.apply(this, arguments);\n      }\n\n      // Recursively wrap all of a function's arguments that are\n      // functions themselves.\n      while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n      try {\n        // Attempt to invoke user-land function\n        // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n        //       means Raven caught an error invoking your application code. This is\n        //       expected behavior and NOT indicative of a bug with Raven.js.\n        return func.apply(this, args);\n      } catch (e) {\n        self._ignoreNextOnError();\n        self.captureException(e, options);\n        throw e;\n      }\n    }\n\n    // copy over properties of the old function\n    for (var property in func) {\n      if (hasKey(func, property)) {\n        wrapped[property] = func[property];\n      }\n    }\n    wrapped.prototype = func.prototype;\n\n    func.__raven_wrapper__ = wrapped;\n    // Signal that this function has been wrapped already\n    // for both debugging and to prevent it to being wrapped twice\n    wrapped.__raven__ = true;\n    wrapped.__inner__ = func;\n\n    return wrapped;\n  },\n\n  /*\n     * Uninstalls the global error handler.\n     *\n     * @return {Raven}\n     */\n  uninstall: function() {\n    TraceKit.report.uninstall();\n\n    this._restoreBuiltIns();\n\n    Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n    this._isRavenInstalled = false;\n\n    return this;\n  },\n\n  /*\n     * Manually capture an exception and send it over to Sentry\n     *\n     * @param {error} ex An exception to be logged\n     * @param {object} options A specific set of options for this error [optional]\n     * @return {Raven}\n     */\n  captureException: function(ex, options) {\n    // Cases for sending ex as a message, rather than an exception\n    var isNotError = !isError(ex);\n    var isNotErrorEvent = !isErrorEvent(ex);\n    var isErrorEventWithoutError = isErrorEvent(ex) && !ex.error;\n\n    if ((isNotError && isNotErrorEvent) || isErrorEventWithoutError) {\n      return this.captureMessage(\n        ex,\n        objectMerge(\n          {\n            trimHeadFrames: 1,\n            stacktrace: true // if we fall back to captureMessage, default to attempting a new trace\n          },\n          options\n        )\n      );\n    }\n\n    // Get actual Error from ErrorEvent\n    if (isErrorEvent(ex)) ex = ex.error;\n\n    // Store the raw exception object for potential debugging and introspection\n    this._lastCapturedException = ex;\n\n    // TraceKit.report will re-raise any exception passed to it,\n    // which means you have to wrap it in try/catch. Instead, we\n    // can wrap it here and only re-raise if TraceKit.report\n    // raises an exception different from the one we asked to\n    // report on.\n    try {\n      var stack = TraceKit.computeStackTrace(ex);\n      this._handleStackInfo(stack, options);\n    } catch (ex1) {\n      if (ex !== ex1) {\n        throw ex1;\n      }\n    }\n\n    return this;\n  },\n\n  /*\n     * Manually send a message to Sentry\n     *\n     * @param {string} msg A plain message to be captured in Sentry\n     * @param {object} options A specific set of options for this message [optional]\n     * @return {Raven}\n     */\n  captureMessage: function(msg, options) {\n    // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n    // early call; we'll error on the side of logging anything called before configuration since it's\n    // probably something you should see:\n    if (\n      !!this._globalOptions.ignoreErrors.test &&\n      this._globalOptions.ignoreErrors.test(msg)\n    ) {\n      return;\n    }\n\n    options = options || {};\n\n    var data = objectMerge(\n      {\n        message: msg + '' // Make sure it's actually a string\n      },\n      options\n    );\n\n    var ex;\n    // Generate a \"synthetic\" stack trace from this point.\n    // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n    //       of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n    //       or if it catches a thrown object without a \"stack\" property.\n    try {\n      throw new Error(msg);\n    } catch (ex1) {\n      ex = ex1;\n    }\n\n    // null exception name so `Error` isn't prefixed to msg\n    ex.name = null;\n    var stack = TraceKit.computeStackTrace(ex);\n\n    // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n    var initialCall = stack.stack[1];\n\n    var fileurl = (initialCall && initialCall.url) || '';\n\n    if (\n      !!this._globalOptions.ignoreUrls.test &&\n      this._globalOptions.ignoreUrls.test(fileurl)\n    ) {\n      return;\n    }\n\n    if (\n      !!this._globalOptions.whitelistUrls.test &&\n      !this._globalOptions.whitelistUrls.test(fileurl)\n    ) {\n      return;\n    }\n\n    if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n      options = objectMerge(\n        {\n          // fingerprint on msg, not stack trace (legacy behavior, could be\n          // revisited)\n          fingerprint: msg,\n          // since we know this is a synthetic trace, the top N-most frames\n          // MUST be from Raven.js, so mark them as in_app later by setting\n          // trimHeadFrames\n          trimHeadFrames: (options.trimHeadFrames || 0) + 1\n        },\n        options\n      );\n\n      var frames = this._prepareFrames(stack, options);\n      data.stacktrace = {\n        // Sentry expects frames oldest to newest\n        frames: frames.reverse()\n      };\n    }\n\n    // Fire away!\n    this._send(data);\n\n    return this;\n  },\n\n  captureBreadcrumb: function(obj) {\n    var crumb = objectMerge(\n      {\n        timestamp: now() / 1000\n      },\n      obj\n    );\n\n    if (isFunction(this._globalOptions.breadcrumbCallback)) {\n      var result = this._globalOptions.breadcrumbCallback(crumb);\n\n      if (isObject(result) && !isEmptyObject(result)) {\n        crumb = result;\n      } else if (result === false) {\n        return this;\n      }\n    }\n\n    this._breadcrumbs.push(crumb);\n    if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n      this._breadcrumbs.shift();\n    }\n    return this;\n  },\n\n  addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n    var pluginArgs = [].slice.call(arguments, 1);\n\n    this._plugins.push([plugin, pluginArgs]);\n    if (this._isRavenInstalled) {\n      this._drainPlugins();\n    }\n\n    return this;\n  },\n\n  /*\n     * Set/clear a user to be sent along with the payload.\n     *\n     * @param {object} user An object representing user data [optional]\n     * @return {Raven}\n     */\n  setUserContext: function(user) {\n    // Intentionally do not merge here since that's an unexpected behavior.\n    this._globalContext.user = user;\n\n    return this;\n  },\n\n  /*\n     * Merge extra attributes to be sent along with the payload.\n     *\n     * @param {object} extra An object representing extra data [optional]\n     * @return {Raven}\n     */\n  setExtraContext: function(extra) {\n    this._mergeContext('extra', extra);\n\n    return this;\n  },\n\n  /*\n     * Merge tags to be sent along with the payload.\n     *\n     * @param {object} tags An object representing tags [optional]\n     * @return {Raven}\n     */\n  setTagsContext: function(tags) {\n    this._mergeContext('tags', tags);\n\n    return this;\n  },\n\n  /*\n     * Clear all of the context.\n     *\n     * @return {Raven}\n     */\n  clearContext: function() {\n    this._globalContext = {};\n\n    return this;\n  },\n\n  /*\n     * Get a copy of the current context. This cannot be mutated.\n     *\n     * @return {object} copy of context\n     */\n  getContext: function() {\n    // lol javascript\n    return JSON.parse(stringify(this._globalContext));\n  },\n\n  /*\n     * Set environment of application\n     *\n     * @param {string} environment Typically something like 'production'.\n     * @return {Raven}\n     */\n  setEnvironment: function(environment) {\n    this._globalOptions.environment = environment;\n\n    return this;\n  },\n\n  /*\n     * Set release version of application\n     *\n     * @param {string} release Typically something like a git SHA to identify version\n     * @return {Raven}\n     */\n  setRelease: function(release) {\n    this._globalOptions.release = release;\n\n    return this;\n  },\n\n  /*\n     * Set the dataCallback option\n     *\n     * @param {function} callback The callback to run which allows the\n     *                            data blob to be mutated before sending\n     * @return {Raven}\n     */\n  setDataCallback: function(callback) {\n    var original = this._globalOptions.dataCallback;\n    this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n    return this;\n  },\n\n  /*\n     * Set the breadcrumbCallback option\n     *\n     * @param {function} callback The callback to run which allows filtering\n     *                            or mutating breadcrumbs\n     * @return {Raven}\n     */\n  setBreadcrumbCallback: function(callback) {\n    var original = this._globalOptions.breadcrumbCallback;\n    this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n    return this;\n  },\n\n  /*\n     * Set the shouldSendCallback option\n     *\n     * @param {function} callback The callback to run which allows\n     *                            introspecting the blob before sending\n     * @return {Raven}\n     */\n  setShouldSendCallback: function(callback) {\n    var original = this._globalOptions.shouldSendCallback;\n    this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n    return this;\n  },\n\n  /**\n     * Override the default HTTP transport mechanism that transmits data\n     * to the Sentry server.\n     *\n     * @param {function} transport Function invoked instead of the default\n     *                             `makeRequest` handler.\n     *\n     * @return {Raven}\n     */\n  setTransport: function(transport) {\n    this._globalOptions.transport = transport;\n\n    return this;\n  },\n\n  /*\n     * Get the latest raw exception that was captured by Raven.\n     *\n     * @return {error}\n     */\n  lastException: function() {\n    return this._lastCapturedException;\n  },\n\n  /*\n     * Get the last event id\n     *\n     * @return {string}\n     */\n  lastEventId: function() {\n    return this._lastEventId;\n  },\n\n  /*\n     * Determine if Raven is setup and ready to go.\n     *\n     * @return {boolean}\n     */\n  isSetup: function() {\n    if (!this._hasJSON) return false; // needs JSON support\n    if (!this._globalServer) {\n      if (!this.ravenNotConfiguredError) {\n        this.ravenNotConfiguredError = true;\n        this._logDebug('error', 'Error: Raven has not been configured.');\n      }\n      return false;\n    }\n    return true;\n  },\n\n  afterLoad: function() {\n    // TODO: remove window dependence?\n\n    // Attempt to initialize Raven on load\n    var RavenConfig = _window.RavenConfig;\n    if (RavenConfig) {\n      this.config(RavenConfig.dsn, RavenConfig.config).install();\n    }\n  },\n\n  showReportDialog: function(options) {\n    if (\n      !_document // doesn't work without a document (React native)\n    )\n      return;\n\n    options = options || {};\n\n    var lastEventId = options.eventId || this.lastEventId();\n    if (!lastEventId) {\n      throw new RavenConfigError('Missing eventId');\n    }\n\n    var dsn = options.dsn || this._dsn;\n    if (!dsn) {\n      throw new RavenConfigError('Missing DSN');\n    }\n\n    var encode = encodeURIComponent;\n    var qs = '';\n    qs += '?eventId=' + encode(lastEventId);\n    qs += '&dsn=' + encode(dsn);\n\n    var user = options.user || this._globalContext.user;\n    if (user) {\n      if (user.name) qs += '&name=' + encode(user.name);\n      if (user.email) qs += '&email=' + encode(user.email);\n    }\n\n    var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n    var script = _document.createElement('script');\n    script.async = true;\n    script.src = globalServer + '/api/embed/error-page/' + qs;\n    (_document.head || _document.body).appendChild(script);\n  },\n\n  /**** Private functions ****/\n  _ignoreNextOnError: function() {\n    var self = this;\n    this._ignoreOnError += 1;\n    setTimeout(function() {\n      // onerror should trigger before setTimeout\n      self._ignoreOnError -= 1;\n    });\n  },\n\n  _triggerEvent: function(eventType, options) {\n    // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n    var evt, key;\n\n    if (!this._hasDocument) return;\n\n    options = options || {};\n\n    eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n    if (_document.createEvent) {\n      evt = _document.createEvent('HTMLEvents');\n      evt.initEvent(eventType, true, true);\n    } else {\n      evt = _document.createEventObject();\n      evt.eventType = eventType;\n    }\n\n    for (key in options)\n      if (hasKey(options, key)) {\n        evt[key] = options[key];\n      }\n\n    if (_document.createEvent) {\n      // IE9 if standards\n      _document.dispatchEvent(evt);\n    } else {\n      // IE8 regardless of Quirks or Standards\n      // IE9 if quirks\n      try {\n        _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n      } catch (e) {\n        // Do nothing\n      }\n    }\n  },\n\n  /**\n     * Wraps addEventListener to capture UI breadcrumbs\n     * @param evtName the event name (e.g. \"click\")\n     * @returns {Function}\n     * @private\n     */\n  _breadcrumbEventHandler: function(evtName) {\n    var self = this;\n    return function(evt) {\n      // reset keypress timeout; e.g. triggering a 'click' after\n      // a 'keypress' will reset the keypress debounce so that a new\n      // set of keypresses can be recorded\n      self._keypressTimeout = null;\n\n      // It's possible this handler might trigger multiple times for the same\n      // event (e.g. event propagation through node ancestors). Ignore if we've\n      // already captured the event.\n      if (self._lastCapturedEvent === evt) return;\n\n      self._lastCapturedEvent = evt;\n\n      // try/catch both:\n      // - accessing evt.target (see getsentry/raven-js#838, #768)\n      // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n      //   can throw an exception in some circumstances.\n      var target;\n      try {\n        target = htmlTreeAsString(evt.target);\n      } catch (e) {\n        target = '<unknown>';\n      }\n\n      self.captureBreadcrumb({\n        category: 'ui.' + evtName, // e.g. ui.click, ui.input\n        message: target\n      });\n    };\n  },\n\n  /**\n     * Wraps addEventListener to capture keypress UI events\n     * @returns {Function}\n     * @private\n     */\n  _keypressEventHandler: function() {\n    var self = this,\n      debounceDuration = 1000; // milliseconds\n\n    // TODO: if somehow user switches keypress target before\n    //       debounce timeout is triggered, we will only capture\n    //       a single breadcrumb from the FIRST target (acceptable?)\n    return function(evt) {\n      var target;\n      try {\n        target = evt.target;\n      } catch (e) {\n        // just accessing event properties can throw an exception in some rare circumstances\n        // see: https://github.com/getsentry/raven-js/issues/838\n        return;\n      }\n      var tagName = target && target.tagName;\n\n      // only consider keypress events on actual input elements\n      // this will disregard keypresses targeting body (e.g. tabbing\n      // through elements, hotkeys, etc)\n      if (\n        !tagName ||\n        (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n      )\n        return;\n\n      // record first keypress in a series, but ignore subsequent\n      // keypresses until debounce clears\n      var timeout = self._keypressTimeout;\n      if (!timeout) {\n        self._breadcrumbEventHandler('input')(evt);\n      }\n      clearTimeout(timeout);\n      self._keypressTimeout = setTimeout(function() {\n        self._keypressTimeout = null;\n      }, debounceDuration);\n    };\n  },\n\n  /**\n     * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n     * @param to the originating URL\n     * @param from the target URL\n     * @private\n     */\n  _captureUrlChange: function(from, to) {\n    var parsedLoc = parseUrl(this._location.href);\n    var parsedTo = parseUrl(to);\n    var parsedFrom = parseUrl(from);\n\n    // because onpopstate only tells you the \"new\" (to) value of location.href, and\n    // not the previous (from) value, we need to track the value of the current URL\n    // state ourselves\n    this._lastHref = to;\n\n    // Use only the path component of the URL if the URL matches the current\n    // document (almost all the time when using pushState)\n    if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n      to = parsedTo.relative;\n    if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n      from = parsedFrom.relative;\n\n    this.captureBreadcrumb({\n      category: 'navigation',\n      data: {\n        to: to,\n        from: from\n      }\n    });\n  },\n\n  /**\n     * Wrap timer functions and event targets to catch errors and provide\n     * better metadata.\n     */\n  _instrumentTryCatch: function() {\n    var self = this;\n\n    var wrappedBuiltIns = self._wrappedBuiltIns;\n\n    function wrapTimeFn(orig) {\n      return function(fn, t) {\n        // preserve arity\n        // Make a copy of the arguments to prevent deoptimization\n        // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n        var args = new Array(arguments.length);\n        for (var i = 0; i < args.length; ++i) {\n          args[i] = arguments[i];\n        }\n        var originalCallback = args[0];\n        if (isFunction(originalCallback)) {\n          args[0] = self.wrap(originalCallback);\n        }\n\n        // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n        // also supports only two arguments and doesn't care what this is, so we\n        // can just call the original function directly.\n        if (orig.apply) {\n          return orig.apply(this, args);\n        } else {\n          return orig(args[0], args[1]);\n        }\n      };\n    }\n\n    var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n    function wrapEventTarget(global) {\n      var proto = _window[global] && _window[global].prototype;\n      if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n        fill(\n          proto,\n          'addEventListener',\n          function(orig) {\n            return function(evtName, fn, capture, secure) {\n              // preserve arity\n              try {\n                if (fn && fn.handleEvent) {\n                  fn.handleEvent = self.wrap(fn.handleEvent);\n                }\n              } catch (err) {\n                // can sometimes get 'Permission denied to access property \"handle Event'\n              }\n\n              // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n              // so that we don't have more than one wrapper function\n              var before, clickHandler, keypressHandler;\n\n              if (\n                autoBreadcrumbs &&\n                autoBreadcrumbs.dom &&\n                (global === 'EventTarget' || global === 'Node')\n              ) {\n                // NOTE: generating multiple handlers per addEventListener invocation, should\n                //       revisit and verify we can just use one (almost certainly)\n                clickHandler = self._breadcrumbEventHandler('click');\n                keypressHandler = self._keypressEventHandler();\n                before = function(evt) {\n                  // need to intercept every DOM event in `before` argument, in case that\n                  // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n                  // see #724\n                  if (!evt) return;\n\n                  var eventType;\n                  try {\n                    eventType = evt.type;\n                  } catch (e) {\n                    // just accessing event properties can throw an exception in some rare circumstances\n                    // see: https://github.com/getsentry/raven-js/issues/838\n                    return;\n                  }\n                  if (eventType === 'click') return clickHandler(evt);\n                  else if (eventType === 'keypress') return keypressHandler(evt);\n                };\n              }\n              return orig.call(\n                this,\n                evtName,\n                self.wrap(fn, undefined, before),\n                capture,\n                secure\n              );\n            };\n          },\n          wrappedBuiltIns\n        );\n        fill(\n          proto,\n          'removeEventListener',\n          function(orig) {\n            return function(evt, fn, capture, secure) {\n              try {\n                fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n              } catch (e) {\n                // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n              }\n              return orig.call(this, evt, fn, capture, secure);\n            };\n          },\n          wrappedBuiltIns\n        );\n      }\n    }\n\n    fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n    fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n    if (_window.requestAnimationFrame) {\n      fill(\n        _window,\n        'requestAnimationFrame',\n        function(orig) {\n          return function(cb) {\n            return orig(self.wrap(cb));\n          };\n        },\n        wrappedBuiltIns\n      );\n    }\n\n    // event targets borrowed from bugsnag-js:\n    // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n    var eventTargets = [\n      'EventTarget',\n      'Window',\n      'Node',\n      'ApplicationCache',\n      'AudioTrackList',\n      'ChannelMergerNode',\n      'CryptoOperation',\n      'EventSource',\n      'FileReader',\n      'HTMLUnknownElement',\n      'IDBDatabase',\n      'IDBRequest',\n      'IDBTransaction',\n      'KeyOperation',\n      'MediaController',\n      'MessagePort',\n      'ModalWindow',\n      'Notification',\n      'SVGElementInstance',\n      'Screen',\n      'TextTrack',\n      'TextTrackCue',\n      'TextTrackList',\n      'WebSocket',\n      'WebSocketWorker',\n      'Worker',\n      'XMLHttpRequest',\n      'XMLHttpRequestEventTarget',\n      'XMLHttpRequestUpload'\n    ];\n    for (var i = 0; i < eventTargets.length; i++) {\n      wrapEventTarget(eventTargets[i]);\n    }\n  },\n\n  /**\n     * Instrument browser built-ins w/ breadcrumb capturing\n     *  - XMLHttpRequests\n     *  - DOM interactions (click/typing)\n     *  - window.location changes\n     *  - console\n     *\n     * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n     */\n  _instrumentBreadcrumbs: function() {\n    var self = this;\n    var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n    var wrappedBuiltIns = self._wrappedBuiltIns;\n\n    function wrapProp(prop, xhr) {\n      if (prop in xhr && isFunction(xhr[prop])) {\n        fill(xhr, prop, function(orig) {\n          return self.wrap(orig);\n        }); // intentionally don't track filled methods on XHR instances\n      }\n    }\n\n    if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n      var xhrproto = XMLHttpRequest.prototype;\n      fill(\n        xhrproto,\n        'open',\n        function(origOpen) {\n          return function(method, url) {\n            // preserve arity\n\n            // if Sentry key appears in URL, don't capture\n            if (isString(url) && url.indexOf(self._globalKey) === -1) {\n              this.__raven_xhr = {\n                method: method,\n                url: url,\n                status_code: null\n              };\n            }\n\n            return origOpen.apply(this, arguments);\n          };\n        },\n        wrappedBuiltIns\n      );\n\n      fill(\n        xhrproto,\n        'send',\n        function(origSend) {\n          return function(data) {\n            // preserve arity\n            var xhr = this;\n\n            function onreadystatechangeHandler() {\n              if (xhr.__raven_xhr && xhr.readyState === 4) {\n                try {\n                  // touching statusCode in some platforms throws\n                  // an exception\n                  xhr.__raven_xhr.status_code = xhr.status;\n                } catch (e) {\n                  /* do nothing */\n                }\n\n                self.captureBreadcrumb({\n                  type: 'http',\n                  category: 'xhr',\n                  data: xhr.__raven_xhr\n                });\n              }\n            }\n\n            var props = ['onload', 'onerror', 'onprogress'];\n            for (var j = 0; j < props.length; j++) {\n              wrapProp(props[j], xhr);\n            }\n\n            if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n              fill(\n                xhr,\n                'onreadystatechange',\n                function(orig) {\n                  return self.wrap(orig, undefined, onreadystatechangeHandler);\n                } /* intentionally don't track this instrumentation */\n              );\n            } else {\n              // if onreadystatechange wasn't actually set by the page on this xhr, we\n              // are free to set our own and capture the breadcrumb\n              xhr.onreadystatechange = onreadystatechangeHandler;\n            }\n\n            return origSend.apply(this, arguments);\n          };\n        },\n        wrappedBuiltIns\n      );\n    }\n\n    if (autoBreadcrumbs.xhr && 'fetch' in _window) {\n      fill(\n        _window,\n        'fetch',\n        function(origFetch) {\n          return function(fn, t) {\n            // preserve arity\n            // Make a copy of the arguments to prevent deoptimization\n            // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n            var args = new Array(arguments.length);\n            for (var i = 0; i < args.length; ++i) {\n              args[i] = arguments[i];\n            }\n\n            var fetchInput = args[0];\n            var method = 'GET';\n            var url;\n\n            if (typeof fetchInput === 'string') {\n              url = fetchInput;\n            } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n              url = fetchInput.url;\n              if (fetchInput.method) {\n                method = fetchInput.method;\n              }\n            } else {\n              url = '' + fetchInput;\n            }\n\n            if (args[1] && args[1].method) {\n              method = args[1].method;\n            }\n\n            var fetchData = {\n              method: method,\n              url: url,\n              status_code: null\n            };\n\n            self.captureBreadcrumb({\n              type: 'http',\n              category: 'fetch',\n              data: fetchData\n            });\n\n            return origFetch.apply(this, args).then(function(response) {\n              fetchData.status_code = response.status;\n\n              return response;\n            });\n          };\n        },\n        wrappedBuiltIns\n      );\n    }\n\n    // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n    // to the document. Do this before we instrument addEventListener.\n    if (autoBreadcrumbs.dom && this._hasDocument) {\n      if (_document.addEventListener) {\n        _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n        _document.addEventListener('keypress', self._keypressEventHandler(), false);\n      } else {\n        // IE8 Compatibility\n        _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n        _document.attachEvent('onkeypress', self._keypressEventHandler());\n      }\n    }\n\n    // record navigation (URL) changes\n    // NOTE: in Chrome App environment, touching history.pushState, *even inside\n    //       a try/catch block*, will cause Chrome to output an error to console.error\n    // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n    var chrome = _window.chrome;\n    var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n    var hasPushAndReplaceState =\n      !isChromePackagedApp &&\n      _window.history &&\n      history.pushState &&\n      history.replaceState;\n    if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n      // TODO: remove onpopstate handler on uninstall()\n      var oldOnPopState = _window.onpopstate;\n      _window.onpopstate = function() {\n        var currentHref = self._location.href;\n        self._captureUrlChange(self._lastHref, currentHref);\n\n        if (oldOnPopState) {\n          return oldOnPopState.apply(this, arguments);\n        }\n      };\n\n      var historyReplacementFunction = function(origHistFunction) {\n        // note history.pushState.length is 0; intentionally not declaring\n        // params to preserve 0 arity\n        return function(/* state, title, url */) {\n          var url = arguments.length > 2 ? arguments[2] : undefined;\n\n          // url argument is optional\n          if (url) {\n            // coerce to string (this is what pushState does)\n            self._captureUrlChange(self._lastHref, url + '');\n          }\n\n          return origHistFunction.apply(this, arguments);\n        };\n      };\n\n      fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n      fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n    }\n\n    if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n      // console\n      var consoleMethodCallback = function(msg, data) {\n        self.captureBreadcrumb({\n          message: msg,\n          level: data.level,\n          category: 'console'\n        });\n      };\n\n      each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n        wrapConsoleMethod(console, level, consoleMethodCallback);\n      });\n    }\n  },\n\n  _restoreBuiltIns: function() {\n    // restore any wrapped builtins\n    var builtin;\n    while (this._wrappedBuiltIns.length) {\n      builtin = this._wrappedBuiltIns.shift();\n\n      var obj = builtin[0],\n        name = builtin[1],\n        orig = builtin[2];\n\n      obj[name] = orig;\n    }\n  },\n\n  _drainPlugins: function() {\n    var self = this;\n\n    // FIX ME TODO\n    each(this._plugins, function(_, plugin) {\n      var installer = plugin[0];\n      var args = plugin[1];\n      installer.apply(self, [self].concat(args));\n    });\n  },\n\n  _parseDSN: function(str) {\n    var m = dsnPattern.exec(str),\n      dsn = {},\n      i = 7;\n\n    try {\n      while (i--) dsn[dsnKeys[i]] = m[i] || '';\n    } catch (e) {\n      throw new RavenConfigError('Invalid DSN: ' + str);\n    }\n\n    if (dsn.pass && !this._globalOptions.allowSecretKey) {\n      throw new RavenConfigError(\n        'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n      );\n    }\n\n    return dsn;\n  },\n\n  _getGlobalServer: function(uri) {\n    // assemble the endpoint from the uri pieces\n    var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n    if (uri.protocol) {\n      globalServer = uri.protocol + ':' + globalServer;\n    }\n    return globalServer;\n  },\n\n  _handleOnErrorStackInfo: function() {\n    // if we are intentionally ignoring errors via onerror, bail out\n    if (!this._ignoreOnError) {\n      this._handleStackInfo.apply(this, arguments);\n    }\n  },\n\n  _handleStackInfo: function(stackInfo, options) {\n    var frames = this._prepareFrames(stackInfo, options);\n\n    this._triggerEvent('handle', {\n      stackInfo: stackInfo,\n      options: options\n    });\n\n    this._processException(\n      stackInfo.name,\n      stackInfo.message,\n      stackInfo.url,\n      stackInfo.lineno,\n      frames,\n      options\n    );\n  },\n\n  _prepareFrames: function(stackInfo, options) {\n    var self = this;\n    var frames = [];\n    if (stackInfo.stack && stackInfo.stack.length) {\n      each(stackInfo.stack, function(i, stack) {\n        var frame = self._normalizeFrame(stack, stackInfo.url);\n        if (frame) {\n          frames.push(frame);\n        }\n      });\n\n      // e.g. frames captured via captureMessage throw\n      if (options && options.trimHeadFrames) {\n        for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n          frames[j].in_app = false;\n        }\n      }\n    }\n    frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n    return frames;\n  },\n\n  _normalizeFrame: function(frame, stackInfoUrl) {\n    // normalize the frames data\n    var normalized = {\n      filename: frame.url,\n      lineno: frame.line,\n      colno: frame.column,\n      function: frame.func || '?'\n    };\n\n    // Case when we don't have any information about the error\n    // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n    // Generating synthetic error doesn't add any value here\n    //\n    // We should probably somehow let a user know that they should fix their code\n    if (!frame.url) {\n      normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n    }\n\n    normalized.in_app = !// determine if an exception came from outside of our app\n    // first we check the global includePaths list.\n    (\n      (!!this._globalOptions.includePaths.test &&\n        !this._globalOptions.includePaths.test(normalized.filename)) ||\n      // Now we check for fun, if the function name is Raven or TraceKit\n      /(Raven|TraceKit)\\./.test(normalized['function']) ||\n      // finally, we do a last ditch effort and check for raven.min.js\n      /raven\\.(min\\.)?js$/.test(normalized.filename)\n    );\n\n    return normalized;\n  },\n\n  _processException: function(type, message, fileurl, lineno, frames, options) {\n    var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n    if (\n      !!this._globalOptions.ignoreErrors.test &&\n      (this._globalOptions.ignoreErrors.test(message) ||\n        this._globalOptions.ignoreErrors.test(prefixedMessage))\n    ) {\n      return;\n    }\n\n    var stacktrace;\n\n    if (frames && frames.length) {\n      fileurl = frames[0].filename || fileurl;\n      // Sentry expects frames oldest to newest\n      // and JS sends them as newest to oldest\n      frames.reverse();\n      stacktrace = {frames: frames};\n    } else if (fileurl) {\n      stacktrace = {\n        frames: [\n          {\n            filename: fileurl,\n            lineno: lineno,\n            in_app: true\n          }\n        ]\n      };\n    }\n\n    if (\n      !!this._globalOptions.ignoreUrls.test &&\n      this._globalOptions.ignoreUrls.test(fileurl)\n    ) {\n      return;\n    }\n\n    if (\n      !!this._globalOptions.whitelistUrls.test &&\n      !this._globalOptions.whitelistUrls.test(fileurl)\n    ) {\n      return;\n    }\n\n    var data = objectMerge(\n      {\n        // sentry.interfaces.Exception\n        exception: {\n          values: [\n            {\n              type: type,\n              value: message,\n              stacktrace: stacktrace\n            }\n          ]\n        },\n        culprit: fileurl\n      },\n      options\n    );\n\n    // Fire away!\n    this._send(data);\n  },\n\n  _trimPacket: function(data) {\n    // For now, we only want to truncate the two different messages\n    // but this could/should be expanded to just trim everything\n    var max = this._globalOptions.maxMessageLength;\n    if (data.message) {\n      data.message = truncate(data.message, max);\n    }\n    if (data.exception) {\n      var exception = data.exception.values[0];\n      exception.value = truncate(exception.value, max);\n    }\n\n    var request = data.request;\n    if (request) {\n      if (request.url) {\n        request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n      }\n      if (request.Referer) {\n        request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n      }\n    }\n\n    if (data.breadcrumbs && data.breadcrumbs.values)\n      this._trimBreadcrumbs(data.breadcrumbs);\n\n    return data;\n  },\n\n  /**\n     * Truncate breadcrumb values (right now just URLs)\n     */\n  _trimBreadcrumbs: function(breadcrumbs) {\n    // known breadcrumb properties with urls\n    // TODO: also consider arbitrary prop values that start with (https?)?://\n    var urlProps = ['to', 'from', 'url'],\n      urlProp,\n      crumb,\n      data;\n\n    for (var i = 0; i < breadcrumbs.values.length; ++i) {\n      crumb = breadcrumbs.values[i];\n      if (\n        !crumb.hasOwnProperty('data') ||\n        !isObject(crumb.data) ||\n        objectFrozen(crumb.data)\n      )\n        continue;\n\n      data = objectMerge({}, crumb.data);\n      for (var j = 0; j < urlProps.length; ++j) {\n        urlProp = urlProps[j];\n        if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n          data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n        }\n      }\n      breadcrumbs.values[i].data = data;\n    }\n  },\n\n  _getHttpData: function() {\n    if (!this._hasNavigator && !this._hasDocument) return;\n    var httpData = {};\n\n    if (this._hasNavigator && _navigator.userAgent) {\n      httpData.headers = {\n        'User-Agent': navigator.userAgent\n      };\n    }\n\n    if (this._hasDocument) {\n      if (_document.location && _document.location.href) {\n        httpData.url = _document.location.href;\n      }\n      if (_document.referrer) {\n        if (!httpData.headers) httpData.headers = {};\n        httpData.headers.Referer = _document.referrer;\n      }\n    }\n\n    return httpData;\n  },\n\n  _resetBackoff: function() {\n    this._backoffDuration = 0;\n    this._backoffStart = null;\n  },\n\n  _shouldBackoff: function() {\n    return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n  },\n\n  /**\n     * Returns true if the in-process data payload matches the signature\n     * of the previously-sent data\n     *\n     * NOTE: This has to be done at this level because TraceKit can generate\n     *       data from window.onerror WITHOUT an exception object (IE8, IE9,\n     *       other old browsers). This can take the form of an \"exception\"\n     *       data object with a single frame (derived from the onerror args).\n     */\n  _isRepeatData: function(current) {\n    var last = this._lastData;\n\n    if (\n      !last ||\n      current.message !== last.message || // defined for captureMessage\n      current.culprit !== last.culprit // defined for captureException/onerror\n    )\n      return false;\n\n    // Stacktrace interface (i.e. from captureMessage)\n    if (current.stacktrace || last.stacktrace) {\n      return isSameStacktrace(current.stacktrace, last.stacktrace);\n    } else if (current.exception || last.exception) {\n      // Exception interface (i.e. from captureException/onerror)\n      return isSameException(current.exception, last.exception);\n    }\n\n    return true;\n  },\n\n  _setBackoffState: function(request) {\n    // If we are already in a backoff state, don't change anything\n    if (this._shouldBackoff()) {\n      return;\n    }\n\n    var status = request.status;\n\n    // 400 - project_id doesn't exist or some other fatal\n    // 401 - invalid/revoked dsn\n    // 429 - too many requests\n    if (!(status === 400 || status === 401 || status === 429)) return;\n\n    var retry;\n    try {\n      // If Retry-After is not in Access-Control-Expose-Headers, most\n      // browsers will throw an exception trying to access it\n      retry = request.getResponseHeader('Retry-After');\n      retry = parseInt(retry, 10) * 1000; // Retry-After is returned in seconds\n    } catch (e) {\n      /* eslint no-empty:0 */\n    }\n\n    this._backoffDuration = retry\n      ? // If Sentry server returned a Retry-After value, use it\n        retry\n      : // Otherwise, double the last backoff duration (starts at 1 sec)\n        this._backoffDuration * 2 || 1000;\n\n    this._backoffStart = now();\n  },\n\n  _send: function(data) {\n    var globalOptions = this._globalOptions;\n\n    var baseData = {\n        project: this._globalProject,\n        logger: globalOptions.logger,\n        platform: 'javascript'\n      },\n      httpData = this._getHttpData();\n\n    if (httpData) {\n      baseData.request = httpData;\n    }\n\n    // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n    if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n    data = objectMerge(baseData, data);\n\n    // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n    data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n    data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n    // Send along our own collected metadata with extra\n    data.extra['session:duration'] = now() - this._startTime;\n\n    if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n      // intentionally make shallow copy so that additions\n      // to breadcrumbs aren't accidentally sent in this request\n      data.breadcrumbs = {\n        values: [].slice.call(this._breadcrumbs, 0)\n      };\n    }\n\n    // If there are no tags/extra, strip the key from the payload alltogther.\n    if (isEmptyObject(data.tags)) delete data.tags;\n\n    if (this._globalContext.user) {\n      // sentry.interfaces.User\n      data.user = this._globalContext.user;\n    }\n\n    // Include the environment if it's defined in globalOptions\n    if (globalOptions.environment) data.environment = globalOptions.environment;\n\n    // Include the release if it's defined in globalOptions\n    if (globalOptions.release) data.release = globalOptions.release;\n\n    // Include server_name if it's defined in globalOptions\n    if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n    if (isFunction(globalOptions.dataCallback)) {\n      data = globalOptions.dataCallback(data) || data;\n    }\n\n    // Why??????????\n    if (!data || isEmptyObject(data)) {\n      return;\n    }\n\n    // Check if the request should be filtered or not\n    if (\n      isFunction(globalOptions.shouldSendCallback) &&\n      !globalOptions.shouldSendCallback(data)\n    ) {\n      return;\n    }\n\n    // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n    // so drop requests until \"cool-off\" period has elapsed.\n    if (this._shouldBackoff()) {\n      this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n      return;\n    }\n\n    if (typeof globalOptions.sampleRate === 'number') {\n      if (Math.random() < globalOptions.sampleRate) {\n        this._sendProcessedPayload(data);\n      }\n    } else {\n      this._sendProcessedPayload(data);\n    }\n  },\n\n  _getUuid: function() {\n    return uuid4();\n  },\n\n  _sendProcessedPayload: function(data, callback) {\n    var self = this;\n    var globalOptions = this._globalOptions;\n\n    if (!this.isSetup()) return;\n\n    // Try and clean up the packet before sending by truncating long values\n    data = this._trimPacket(data);\n\n    // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n    // but this would require copying an un-truncated copy of the data packet, which can be\n    // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n    if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n      this._logDebug('warn', 'Raven dropped repeat event: ', data);\n      return;\n    }\n\n    // Send along an event_id if not explicitly passed.\n    // This event_id can be used to reference the error within Sentry itself.\n    // Set lastEventId after we know the error should actually be sent\n    this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n    // Store outbound payload after trim\n    this._lastData = data;\n\n    this._logDebug('debug', 'Raven about to send:', data);\n\n    var auth = {\n      sentry_version: '7',\n      sentry_client: 'raven-js/' + this.VERSION,\n      sentry_key: this._globalKey\n    };\n\n    if (this._globalSecret) {\n      auth.sentry_secret = this._globalSecret;\n    }\n\n    var exception = data.exception && data.exception.values[0];\n    this.captureBreadcrumb({\n      category: 'sentry',\n      message: exception\n        ? (exception.type ? exception.type + ': ' : '') + exception.value\n        : data.message,\n      event_id: data.event_id,\n      level: data.level || 'error' // presume error unless specified\n    });\n\n    var url = this._globalEndpoint;\n    (globalOptions.transport || this._makeRequest).call(this, {\n      url: url,\n      auth: auth,\n      data: data,\n      options: globalOptions,\n      onSuccess: function success() {\n        self._resetBackoff();\n\n        self._triggerEvent('success', {\n          data: data,\n          src: url\n        });\n        callback && callback();\n      },\n      onError: function failure(error) {\n        self._logDebug('error', 'Raven transport failed to send: ', error);\n\n        if (error.request) {\n          self._setBackoffState(error.request);\n        }\n\n        self._triggerEvent('failure', {\n          data: data,\n          src: url\n        });\n        error = error || new Error('Raven send failed (no additional details provided)');\n        callback && callback(error);\n      }\n    });\n  },\n\n  _makeRequest: function(opts) {\n    var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n    if (!request) return;\n\n    // if browser doesn't support CORS (e.g. IE7), we are out of luck\n    var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n    if (!hasCORS) return;\n\n    var url = opts.url;\n\n    if ('withCredentials' in request) {\n      request.onreadystatechange = function() {\n        if (request.readyState !== 4) {\n          return;\n        } else if (request.status === 200) {\n          opts.onSuccess && opts.onSuccess();\n        } else if (opts.onError) {\n          var err = new Error('Sentry error code: ' + request.status);\n          err.request = request;\n          opts.onError(err);\n        }\n      };\n    } else {\n      request = new XDomainRequest();\n      // xdomainrequest cannot go http -> https (or vice versa),\n      // so always use protocol relative\n      url = url.replace(/^https?:/, '');\n\n      // onreadystatechange not supported by XDomainRequest\n      if (opts.onSuccess) {\n        request.onload = opts.onSuccess;\n      }\n      if (opts.onError) {\n        request.onerror = function() {\n          var err = new Error('Sentry error code: XDomainRequest');\n          err.request = request;\n          opts.onError(err);\n        };\n      }\n    }\n\n    // NOTE: auth is intentionally sent as part of query string (NOT as custom\n    //       HTTP header) so as to avoid preflight CORS requests\n    request.open('POST', url + '?' + urlencode(opts.auth));\n    request.send(stringify(opts.data));\n  },\n\n  _logDebug: function(level) {\n    if (this._originalConsoleMethods[level] && this.debug) {\n      // In IE<10 console methods do not have their own 'apply' method\n      Function.prototype.apply.call(\n        this._originalConsoleMethods[level],\n        this._originalConsole,\n        [].slice.call(arguments, 1)\n      );\n    }\n  },\n\n  _mergeContext: function(key, context) {\n    if (isUndefined(context)) {\n      delete this._globalContext[key];\n    } else {\n      this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n    }\n  }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js.  Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n  collectWindowErrors: true,\n  debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n  typeof window !== 'undefined'\n    ? window\n    : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n  if (typeof document === 'undefined' || document.location == null) return '';\n\n  return document.location.href;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n *   TraceKit.report.subscribe(function(stackInfo) { ... })\n *   TraceKit.report.unsubscribe(function(stackInfo) { ... })\n *   TraceKit.report(exception)\n *   try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n *   - Firefox: full stack trace with line numbers, plus column number\n *              on top frame; column number is not guaranteed\n *   - Opera:   full stack trace with line and column numbers\n *   - Chrome:  full stack trace with line and column numbers\n *   - Safari:  line and column number for the top frame only; some frames\n *              may be missing, and column number is not guaranteed\n *   - IE:      line and column number for the top frame only; some frames\n *              may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n *   - IE5.5+ (only 8.0 tested)\n *   - Firefox 0.9+ (only 3.5+ tested)\n *   - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n *     Exceptions Have Stacktrace to be enabled in opera:config)\n *   - Safari 3+ (only 4+ tested)\n *   - Chrome 1+ (only 5+ tested)\n *   - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n  var handlers = [],\n    lastArgs = null,\n    lastException = null,\n    lastExceptionStack = null;\n\n  /**\n     * Add a crash handler.\n     * @param {Function} handler\n     */\n  function subscribe(handler) {\n    installGlobalHandler();\n    handlers.push(handler);\n  }\n\n  /**\n     * Remove a crash handler.\n     * @param {Function} handler\n     */\n  function unsubscribe(handler) {\n    for (var i = handlers.length - 1; i >= 0; --i) {\n      if (handlers[i] === handler) {\n        handlers.splice(i, 1);\n      }\n    }\n  }\n\n  /**\n     * Remove all crash handlers.\n     */\n  function unsubscribeAll() {\n    uninstallGlobalHandler();\n    handlers = [];\n  }\n\n  /**\n     * Dispatch stack information to all handlers.\n     * @param {Object.<string, *>} stack\n     */\n  function notifyHandlers(stack, isWindowError) {\n    var exception = null;\n    if (isWindowError && !TraceKit.collectWindowErrors) {\n      return;\n    }\n    for (var i in handlers) {\n      if (handlers.hasOwnProperty(i)) {\n        try {\n          handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n        } catch (inner) {\n          exception = inner;\n        }\n      }\n    }\n\n    if (exception) {\n      throw exception;\n    }\n  }\n\n  var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n  /**\n     * Ensures all global unhandled exceptions are recorded.\n     * Supported by Gecko and IE.\n     * @param {string} message Error message.\n     * @param {string} url URL of script that generated the exception.\n     * @param {(number|string)} lineNo The line number at which the error\n     * occurred.\n     * @param {?(number|string)} colNo The column number at which the error\n     * occurred.\n     * @param {?Error} ex The actual Error object.\n     */\n  function traceKitWindowOnError(message, url, lineNo, colNo, ex) {\n    var stack = null;\n\n    if (lastExceptionStack) {\n      TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n        lastExceptionStack,\n        url,\n        lineNo,\n        message\n      );\n      processLastException();\n    } else if (ex && utils.isError(ex)) {\n      // non-string `ex` arg; attempt to extract stack trace\n\n      // New chrome and blink send along a real error object\n      // Let's just report that like a normal error.\n      // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n      stack = TraceKit.computeStackTrace(ex);\n      notifyHandlers(stack, true);\n    } else {\n      var location = {\n        url: url,\n        line: lineNo,\n        column: colNo\n      };\n\n      var name = undefined;\n      var msg = message; // must be new var or will modify original `arguments`\n      var groups;\n      if ({}.toString.call(message) === '[object String]') {\n        var groups = message.match(ERROR_TYPES_RE);\n        if (groups) {\n          name = groups[1];\n          msg = groups[2];\n        }\n      }\n\n      location.func = UNKNOWN_FUNCTION;\n\n      stack = {\n        name: name,\n        message: msg,\n        url: getLocationHref(),\n        stack: [location]\n      };\n      notifyHandlers(stack, true);\n    }\n\n    if (_oldOnerrorHandler) {\n      return _oldOnerrorHandler.apply(this, arguments);\n    }\n\n    return false;\n  }\n\n  function installGlobalHandler() {\n    if (_onErrorHandlerInstalled) {\n      return;\n    }\n    _oldOnerrorHandler = _window.onerror;\n    _window.onerror = traceKitWindowOnError;\n    _onErrorHandlerInstalled = true;\n  }\n\n  function uninstallGlobalHandler() {\n    if (!_onErrorHandlerInstalled) {\n      return;\n    }\n    _window.onerror = _oldOnerrorHandler;\n    _onErrorHandlerInstalled = false;\n    _oldOnerrorHandler = undefined;\n  }\n\n  function processLastException() {\n    var _lastExceptionStack = lastExceptionStack,\n      _lastArgs = lastArgs;\n    lastArgs = null;\n    lastExceptionStack = null;\n    lastException = null;\n    notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n  }\n\n  /**\n     * Reports an unhandled Error to TraceKit.\n     * @param {Error} ex\n     * @param {?boolean} rethrow If false, do not re-throw the exception.\n     * Only used for window.onerror to not cause an infinite loop of\n     * rethrowing.\n     */\n  function report(ex, rethrow) {\n    var args = _slice.call(arguments, 1);\n    if (lastExceptionStack) {\n      if (lastException === ex) {\n        return; // already caught by an inner catch block, ignore\n      } else {\n        processLastException();\n      }\n    }\n\n    var stack = TraceKit.computeStackTrace(ex);\n    lastExceptionStack = stack;\n    lastException = ex;\n    lastArgs = args;\n\n    // If the stack trace is incomplete, wait for 2 seconds for\n    // slow slow IE to see if onerror occurs or not before reporting\n    // this exception; otherwise, we will end up with an incomplete\n    // stack trace\n    setTimeout(function() {\n      if (lastException === ex) {\n        processLastException();\n      }\n    }, stack.incomplete ? 2000 : 0);\n\n    if (rethrow !== false) {\n      throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n    }\n  }\n\n  report.subscribe = subscribe;\n  report.unsubscribe = unsubscribe;\n  report.uninstall = unsubscribeAll;\n  return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n *   s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n *   s.name              - exception name\n *   s.message           - exception message\n *   s.stack[i].url      - JavaScript or HTML file URL\n *   s.stack[i].func     - function name, or empty for anonymous functions (if guessing did not work)\n *   s.stack[i].args     - arguments passed to the function, if known\n *   s.stack[i].line     - line number, if known\n *   s.stack[i].column   - column number, if known\n *\n * Supports:\n *   - Firefox:  full stack trace with line numbers and unreliable column\n *               number on top frame\n *   - Opera 10: full stack trace with line and column numbers\n *   - Opera 9-: full stack trace with line numbers\n *   - Chrome:   full stack trace with line and column numbers\n *   - Safari:   line and column number for the topmost stacktrace element\n *               only\n *   - IE:       no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n *  * in Safari, some methods may be missing from the stack trace;\n *  * in IE, the topmost function in the stack trace will always be the\n *    caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n  // Contents of Exception in various browsers.\n  //\n  // SAFARI:\n  // ex.message = Can't find variable: qq\n  // ex.line = 59\n  // ex.sourceId = 580238192\n  // ex.sourceURL = http://...\n  // ex.expressionBeginOffset = 96\n  // ex.expressionCaretOffset = 98\n  // ex.expressionEndOffset = 98\n  // ex.name = ReferenceError\n  //\n  // FIREFOX:\n  // ex.message = qq is not defined\n  // ex.fileName = http://...\n  // ex.lineNumber = 59\n  // ex.columnNumber = 69\n  // ex.stack = ...stack trace... (see the example below)\n  // ex.name = ReferenceError\n  //\n  // CHROME:\n  // ex.message = qq is not defined\n  // ex.name = ReferenceError\n  // ex.type = not_defined\n  // ex.arguments = ['aa']\n  // ex.stack = ...stack trace...\n  //\n  // INTERNET EXPLORER:\n  // ex.message = ...\n  // ex.name = ReferenceError\n  //\n  // OPERA:\n  // ex.message = ...message... (see the example below)\n  // ex.name = ReferenceError\n  // ex.opera#sourceloc = 11  (pretty much useless, duplicates the info in ex.message)\n  // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n  /**\n     * Computes stack trace information from the stack property.\n     * Chrome and Gecko use this property.\n     * @param {Error} ex\n     * @return {?Object.<string, *>} Stack trace information.\n     */\n  function computeStackTraceFromStackProp(ex) {\n    if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n    var chrome = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,\n      gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i,\n      winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,\n      // Used to additionally parse URL/line/column from eval frames\n      geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,\n      chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,\n      lines = ex.stack.split('\\n'),\n      stack = [],\n      submatch,\n      parts,\n      element,\n      reference = /^(.*) is undefined$/.exec(ex.message);\n\n    for (var i = 0, j = lines.length; i < j; ++i) {\n      if ((parts = chrome.exec(lines[i]))) {\n        var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n        var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n        if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n          // throw out eval line/column and use top-most line/column number\n          parts[2] = submatch[1]; // url\n          parts[3] = submatch[2]; // line\n          parts[4] = submatch[3]; // column\n        }\n        element = {\n          url: !isNative ? parts[2] : null,\n          func: parts[1] || UNKNOWN_FUNCTION,\n          args: isNative ? [parts[2]] : [],\n          line: parts[3] ? +parts[3] : null,\n          column: parts[4] ? +parts[4] : null\n        };\n      } else if ((parts = winjs.exec(lines[i]))) {\n        element = {\n          url: parts[2],\n          func: parts[1] || UNKNOWN_FUNCTION,\n          args: [],\n          line: +parts[3],\n          column: parts[4] ? +parts[4] : null\n        };\n      } else if ((parts = gecko.exec(lines[i]))) {\n        var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n        if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n          // throw out eval line/column and use top-most line number\n          parts[3] = submatch[1];\n          parts[4] = submatch[2];\n          parts[5] = null; // no column when eval\n        } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n          // FireFox uses this awesome columnNumber property for its top frame\n          // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n          // so adding 1\n          // NOTE: this hack doesn't work if top-most frame is eval\n          stack[0].column = ex.columnNumber + 1;\n        }\n        element = {\n          url: parts[3],\n          func: parts[1] || UNKNOWN_FUNCTION,\n          args: parts[2] ? parts[2].split(',') : [],\n          line: parts[4] ? +parts[4] : null,\n          column: parts[5] ? +parts[5] : null\n        };\n      } else {\n        continue;\n      }\n\n      if (!element.func && element.line) {\n        element.func = UNKNOWN_FUNCTION;\n      }\n\n      stack.push(element);\n    }\n\n    if (!stack.length) {\n      return null;\n    }\n\n    return {\n      name: ex.name,\n      message: ex.message,\n      url: getLocationHref(),\n      stack: stack\n    };\n  }\n\n  /**\n     * Adds information about the first frame to incomplete stack traces.\n     * Safari and IE require this to get complete data on the first frame.\n     * @param {Object.<string, *>} stackInfo Stack trace information from\n     * one of the compute* methods.\n     * @param {string} url The URL of the script that caused an error.\n     * @param {(number|string)} lineNo The line number of the script that\n     * caused an error.\n     * @param {string=} message The error generated by the browser, which\n     * hopefully contains the name of the object that caused the error.\n     * @return {boolean} Whether or not the stack information was\n     * augmented.\n     */\n  function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n    var initial = {\n      url: url,\n      line: lineNo\n    };\n\n    if (initial.url && initial.line) {\n      stackInfo.incomplete = false;\n\n      if (!initial.func) {\n        initial.func = UNKNOWN_FUNCTION;\n      }\n\n      if (stackInfo.stack.length > 0) {\n        if (stackInfo.stack[0].url === initial.url) {\n          if (stackInfo.stack[0].line === initial.line) {\n            return false; // already in stack trace\n          } else if (\n            !stackInfo.stack[0].line &&\n            stackInfo.stack[0].func === initial.func\n          ) {\n            stackInfo.stack[0].line = initial.line;\n            return false;\n          }\n        }\n      }\n\n      stackInfo.stack.unshift(initial);\n      stackInfo.partial = true;\n      return true;\n    } else {\n      stackInfo.incomplete = true;\n    }\n\n    return false;\n  }\n\n  /**\n     * Computes stack trace information by walking the arguments.caller\n     * chain at the time the exception occurred. This will cause earlier\n     * frames to be missed but is the only way to get any stack trace in\n     * Safari and IE. The top frame is restored by\n     * {@link augmentStackTraceWithInitialElement}.\n     * @param {Error} ex\n     * @return {?Object.<string, *>} Stack trace information.\n     */\n  function computeStackTraceByWalkingCallerChain(ex, depth) {\n    var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n      stack = [],\n      funcs = {},\n      recursion = false,\n      parts,\n      item,\n      source;\n\n    for (\n      var curr = computeStackTraceByWalkingCallerChain.caller;\n      curr && !recursion;\n      curr = curr.caller\n    ) {\n      if (curr === computeStackTrace || curr === TraceKit.report) {\n        // console.log('skipping internal function');\n        continue;\n      }\n\n      item = {\n        url: null,\n        func: UNKNOWN_FUNCTION,\n        line: null,\n        column: null\n      };\n\n      if (curr.name) {\n        item.func = curr.name;\n      } else if ((parts = functionName.exec(curr.toString()))) {\n        item.func = parts[1];\n      }\n\n      if (typeof item.func === 'undefined') {\n        try {\n          item.func = parts.input.substring(0, parts.input.indexOf('{'));\n        } catch (e) {}\n      }\n\n      if (funcs['' + curr]) {\n        recursion = true;\n      } else {\n        funcs['' + curr] = true;\n      }\n\n      stack.push(item);\n    }\n\n    if (depth) {\n      // console.log('depth is ' + depth);\n      // console.log('stack is ' + stack.length);\n      stack.splice(0, depth);\n    }\n\n    var result = {\n      name: ex.name,\n      message: ex.message,\n      url: getLocationHref(),\n      stack: stack\n    };\n    augmentStackTraceWithInitialElement(\n      result,\n      ex.sourceURL || ex.fileName,\n      ex.line || ex.lineNumber,\n      ex.message || ex.description\n    );\n    return result;\n  }\n\n  /**\n     * Computes a stack trace for an exception.\n     * @param {Error} ex\n     * @param {(string|number)=} depth\n     */\n  function computeStackTrace(ex, depth) {\n    var stack = null;\n    depth = depth == null ? 0 : +depth;\n\n    try {\n      stack = computeStackTraceFromStackProp(ex);\n      if (stack) {\n        return stack;\n      }\n    } catch (e) {\n      if (TraceKit.debug) {\n        throw e;\n      }\n    }\n\n    try {\n      stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n      if (stack) {\n        return stack;\n      }\n    } catch (e) {\n      if (TraceKit.debug) {\n        throw e;\n      }\n    }\n    return {\n      name: ex.name,\n      message: ex.message,\n      url: getLocationHref()\n    };\n  }\n\n  computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n  computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n  return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n  for (var i = 0; i < haystack.length; ++i) {\n    if (haystack[i] === needle) return i;\n  }\n  return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n  return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n  var err = {\n    // These properties are implemented as magical getters and don't show up in for in\n    stack: value.stack,\n    message: value.message,\n    name: value.name\n  };\n\n  for (var i in value) {\n    if (Object.prototype.hasOwnProperty.call(value, i)) {\n      err[i] = value[i];\n    }\n  }\n\n  return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n  var stack = [];\n  var keys = [];\n\n  if (cycleReplacer == null) {\n    cycleReplacer = function(key, value) {\n      if (stack[0] === value) {\n        return '[Circular ~]';\n      }\n      return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n    };\n  }\n\n  return function(key, value) {\n    if (stack.length > 0) {\n      var thisPos = indexOf(stack, this);\n      ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n      ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n      if (~indexOf(stack, value)) {\n        value = cycleReplacer.call(this, key, value);\n      }\n    } else {\n      stack.push(value);\n    }\n\n    return replacer == null\n      ? value instanceof Error ? stringifyError(value) : value\n      : replacer.call(this, key, value);\n  };\n}\n","function RavenConfigError(message) {\n  this.name = 'RavenConfigError';\n  this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var wrapMethod = function(console, level, callback) {\n  var originalConsoleLevel = console[level];\n  var originalConsole = console;\n\n  if (!(level in console)) {\n    return;\n  }\n\n  var sentryLevel = level === 'warn' ? 'warning' : level;\n\n  console[level] = function() {\n    var args = [].slice.call(arguments);\n\n    var msg = '' + args.join(' ');\n    var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n    if (level === 'assert') {\n      if (args[0] === false) {\n        // Default browsers message\n        msg = 'Assertion failed: ' + (args.slice(1).join(' ') || 'console.assert');\n        data.extra.arguments = args.slice(1);\n        callback && callback(msg, data);\n      }\n    } else {\n      callback && callback(msg, data);\n    }\n\n    // this fails for some browsers. :(\n    if (originalConsoleLevel) {\n      // IE9 doesn't allow calling apply on console functions directly\n      // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n      Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n    }\n  };\n};\n\nmodule.exports = {\n  wrapMethod: wrapMethod\n};\n","const {\n  adminUrl,\n  ajaxUrl,\n  env,\n  hubspotBaseUrl,\n  leadinPluginVersion,\n  plugins,\n  phpVersion,\n  portalId,\n  theme,\n  wpVersion,\n} = window.leadinConfig;\n\nconst i18n = window.leadinI18n;\n\nexport {\n  adminUrl,\n  ajaxUrl,\n  env,\n  hubspotBaseUrl,\n  i18n,\n  leadinPluginVersion,\n  plugins,\n  phpVersion,\n  portalId,\n  theme,\n  wpVersion,\n};\n","import Raven from 'raven-js';\nimport {\n  env,\n  phpVersion,\n  wpVersion,\n  leadinPluginVersion,\n  portalId,\n  plugins,\n} from '../constants/leadinConfig';\n\nexport function configureRaven() {\n  if (env !== 'prod') {\n    return;\n  }\n\n  Raven.config(\n    'https://[email protected]/1',\n    {\n      instrument: {\n        tryCatch: false,\n      },\n    }\n  ).install();\n\n  Raven.setTagsContext({\n    leadin: leadinPluginVersion,\n    php: phpVersion,\n    wordpress: wpVersion,\n  });\n\n  Raven.setUserContext({\n    hub: portalId,\n    plugins: Object.keys(plugins)\n      .map(name => `${name}#${plugins[name].Version}`)\n      .join(','),\n  });\n}\n\nexport default Raven;\n","import { hubspotBaseUrl, portalId, i18n } from './constants/leadinConfig';\n\nexport function initChatflows() {\n  const leadinMenu = document.getElementById('toplevel_page_leadin');\n  const firstSubMenu = leadinMenu && leadinMenu.querySelector('.wp-first-item');\n  const chatflowsUrl = `${hubspotBaseUrl}/chatflows/${portalId}`;\n\n  const chatflowsHtml = `<li><a href=\"${chatflowsUrl}\" target=\"_blank\">${\n    i18n.chatflows\n  }</a></li>`;\n\n  if (firstSubMenu) {\n    firstSubMenu.insertAdjacentHTML('afterend', chatflowsHtml);\n  }\n}\n","export function log(...args) {\n  try {\n    if (window.localStorage.LEADIN_DEBUG) {\n      args.unshift('[Leadin]');\n      console.log(...args);\n    }\n  } catch (e) {\n    //\n  }\n}\n","export const domElements = {\n  iframe: '#leadin-iframe',\n  allMenuButtons:\n    '.toplevel_page_leadin > a, .toplevel_page_leadin > ul > li > a',\n  subMenuButtons: '.toplevel_page_leadin > ul > li',\n};\n","import EventBus from './EventBus';\nimport { log } from '../utils';\nimport { domElements } from '../constants/selectors';\nimport { hubspotBaseUrl } from '../constants/leadinConfig';\nimport Raven from './Raven';\n\nconst eventBus = new EventBus();\nconst callbacks = [];\n\nfunction postMessageObject(message) {\n  log('Posting message');\n  log(JSON.stringify(message));\n  jQuery(domElements.iframe)[0].contentWindow.postMessage(\n    JSON.stringify(message),\n    hubspotBaseUrl\n  );\n}\n\nfunction reply(message, response) {\n  if (!response) {\n    response = 'Message Received';\n  }\n  const newMessage = Object.assign({}, message);\n  newMessage.response = response;\n  postMessageObject(newMessage);\n}\n\nfunction handleResponse(message) {\n  callbacks[message._callbackId - 1](message.response);\n}\n\nfunction handleMessage(message) {\n  log('Received message');\n  log(JSON.stringify(message));\n\n  if (message.response && message._callbackId) {\n    handleResponse(message);\n  } else {\n    Object.keys(message).forEach(key => {\n      eventBus.trigger(key, [message[key], reply.bind(null, message)]);\n    });\n  }\n}\n\nfunction handleMessageEvent(event) {\n  if (event.origin === hubspotBaseUrl) {\n    try {\n      const data = JSON.parse(event.data);\n      handleMessage(data);\n    } catch (e) {\n      // Error in parsing message\n    }\n  }\n}\n\nexport function postMessage(key, payload, onResponse, onTimeout, timeout) {\n  if (!timeout) {\n    timeout = 500;\n  }\n\n  const timeoutCallback = function() {\n    Raven.captureMessage(\n      `LeadinWordpressPlugin postMessage response timeout on message key: ${key}`\n    );\n    onTimeout();\n  };\n\n  const timeoutId = setTimeout(Raven.wrap(timeoutCallback), timeout);\n\n  const message = {};\n  message[key] = payload;\n  message._callbackId = callbacks.push((...args) => {\n    clearTimeout(timeoutId);\n    onResponse(...args);\n  });\n  postMessageObject(message);\n}\n\nexport function onMessage(key, callback) {\n  eventBus.on(key, (...args) => {\n    callback.apply(null, args.slice(1));\n  });\n}\n\nexport function initInterframe() {\n  window.addEventListener('message', handleMessageEvent);\n}\n","import Raven from './Raven';\n\nexport default class EventBus {\n  constructor() {\n    this.bus = jQuery({});\n  }\n\n  trigger(...args) {\n    this.bus.trigger(...args);\n  }\n\n  on(event, callback) {\n    this.bus.on(event, Raven.wrap(callback));\n  }\n}\n","import Raven from '../lib/Raven';\nimport { ajaxUrl } from '../constants/leadinConfig';\n\nfunction makeRequest(action, method, payload, success, error) {\n  const url = `${ajaxUrl}?action=${action}`;\n  const ajaxPayload = {\n    url,\n    method,\n    contentType: 'application/json',\n    success:\n      typeof success === 'function'\n        ? Raven.wrap(data => success(JSON.parse(data)))\n        : undefined,\n    error: Raven.wrap(jqXHR => {\n      let message;\n      try {\n        message = JSON.parse(jqXHR.responseText).error;\n      } catch (e) {\n        message = jqXHR.responseText;\n      }\n\n      Raven.captureMessage(\n        `AJAX request failed with code ${jqXHR.status}: ${message}`\n      );\n\n      if (typeof error === 'function') {\n        error();\n      }\n    }),\n  };\n\n  if (payload) {\n    ajaxPayload.data = JSON.stringify(payload);\n  }\n\n  jQuery.ajax(ajaxPayload);\n}\n\nfunction post(action, payload, success, error) {\n  return makeRequest(action, 'POST', payload, success, error);\n}\n\nfunction get(action, success, error) {\n  return makeRequest(action, 'GET', null, success, error);\n}\n\nconst getPortal = () => get('leadin_get_portal');\nlet portalPollingTimeout;\nlet stopPortalPolling = false;\n\nexport function startPortalIdPolling() {\n  portalPollingTimeout = setTimeout(() => {\n    getPortal(data => {\n      if (data.portalId) {\n        location.reload(true);\n      } else if (!stopPortalPolling) {\n        startPortalIdPolling();\n      }\n    }, startPortalIdPolling);\n  }, 5000);\n}\n\nexport function clearPortalIdPolling() {\n  clearTimeout(portalPollingTimeout);\n  stopPortalPolling = true;\n}\n\nexport const connect = (portalId, success, error) =>\n  post('leadin_registration_ajax', { portalId }, success, error);\n\nexport const disconnect = post.bind(null, 'leadin_disconnect_ajax', {});\nexport const getDomain = get.bind(null, 'leadin_get_domain');\nexport const markAsOutdated = get.bind(null, 'leadin_mark_outdated');\n","import { onMessage, postMessage } from '../lib/Interframe';\n\nfunction createHandler(key) {\n  return onMessage.bind(null, key);\n}\n\nexport const onClearQueryParam = createHandler('leadin_clear_query_param');\nexport const onConnect = createHandler('leadin_connect_portal');\nexport const onDisableNavigation = createHandler('leadin_disable_navigation');\nexport const onDisconnect = createHandler('leadin_disconnect_portal');\nexport const onEnterFullScreen = createHandler('leadin_enter_fullscreen');\nexport const onExitFullScreen = createHandler('leadin_exit_fullscreen');\nexport const onGetAssetsPayload = createHandler('leadin_get_assets_payload');\nexport const onGetDomain = createHandler('leadin_get_wp_domain');\nexport const onInitNavigation = createHandler('leadin_init_navigation');\nexport const onInterframeReady = createHandler('leadin_interframe_ready');\nexport const onMarkAsOutdated = createHandler('leadin_mark_outdated');\nexport const onPageReload = createHandler('leadin_page_reload');\nexport const onUpgrade = createHandler('leadin_upgrade');\n\nexport function changeRoute(route) {\n  postMessage('leadin_change_route', route, null, () => location.reload(true));\n}\n","import { domElements } from './constants/selectors';\nimport { changeRoute } from './api/hubspotPluginApi';\n\nexport function initNavigation() {\n  function setSelectedMenuItem() {\n    jQuery(domElements.subMenuButtons).removeClass('current');\n    const pageParam = window.location.search.match(/\\?page=leadin_?\\w*/)[0]; // filter page query param\n    const selectedElement = jQuery(`a[href=\"admin.php${pageParam}\"]`);\n    selectedElement.parent().addClass('current');\n  }\n\n  function handleNavigation() {\n    const appRoute = window.location.search.match(/page=leadin_?(\\w*)/)[1];\n    changeRoute(appRoute);\n    setSelectedMenuItem();\n  }\n\n  function handleClick() {\n    // Don't interrupt modifier keys\n    if (event.metaKey || event.altKey || event.shiftKey) {\n      return;\n    }\n    window.history.pushState(null, null, jQuery(this).attr('href'));\n    handleNavigation();\n    event.preventDefault();\n  }\n\n  // Browser back and forward events navigation\n  window.addEventListener('popstate', handleNavigation);\n\n  // Menu Navigation\n  jQuery(domElements.allMenuButtons).click(handleClick);\n}\n\nexport function disableNavigation() {\n  jQuery(domElements.allMenuButtons).off('click');\n}\n","export default {\n  'genesis-sample': {\n    formsStyle: {\n      fontFamily: 'Source Sans Pro',\n      labelTextColor: '#333333',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#0073e5',\n    },\n    chatStyle: {\n      accentColor: '#0073e5',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#0073e5',\n    },\n    onExitLeadFlowStyle: {\n      color: '#0073e5',\n    },\n  },\n  'academy-pro': {\n    formsStyle: {\n      fontFamily: 'PT Sans',\n      labelTextColor: '#222222',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#e22c2f',\n    },\n    chatStyle: {\n      accentColor: '#e22c2f',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#e22c2f',\n    },\n    onExitLeadFlowStyle: {\n      color: '#e22c2f',\n    },\n  },\n  'agency-pro': {\n    formsStyle: {\n      fontFamily: 'EB Garamond',\n      labelTextColor: '#666666',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#d7c603',\n    },\n    chatStyle: {\n      accentColor: '#d7c603',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#d7c603',\n    },\n    onExitLeadFlowStyle: {\n      color: '#d7c603',\n    },\n  },\n  'agentpress-pro': {\n    formsStyle: {\n      fontFamily: 'Roboto',\n      labelTextColor: '#1a212b',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#d23836',\n    },\n    chatStyle: {\n      accentColor: '#d23836',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#d23836',\n    },\n    onExitLeadFlowStyle: {\n      color: '#d23836',\n    },\n  },\n  'altitude-pro': {\n    formsStyle: {\n      fontFamily: 'Ek Mukta',\n      labelTextColor: '#000000',\n      labelTextSize: '20px',\n      submitFontColor: '#ffffff',\n      submitColor: '#079bc4',\n    },\n    chatStyle: {\n      accentColor: '#079bc4',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#079bc4',\n    },\n    onExitLeadFlowStyle: {\n      color: '#079bc4',\n    },\n  },\n  'ambiance-pro': {\n    formsStyle: {\n      fontFamily: 'Merriweather',\n      labelTextColor: '#333333',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#e12727',\n    },\n    chatStyle: {\n      accentColor: '#e12727',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#e12727',\n    },\n    onExitLeadFlowStyle: {\n      color: '#e12727',\n    },\n  },\n  'atmosphere-pro': {\n    formsStyle: {\n      fontFamily: 'Lato',\n      labelTextColor: '#333333',\n      labelTextSize: '20px',\n      submitFontColor: '#ffffff',\n      submitColor: '#333333',\n    },\n    chatStyle: {\n      accentColor: '#333333',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#333333',\n    },\n    onExitLeadFlowStyle: {\n      color: '#333333',\n    },\n  },\n  'author-pro': {\n    formsStyle: {\n      fontFamily: 'Lato',\n      labelTextColor: '#000000',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#000000',\n    },\n    chatStyle: {\n      accentColor: '#000000',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#000000',\n    },\n    onExitLeadFlowStyle: {\n      color: '#000000',\n    },\n  },\n  'authority-pro': {\n    formsStyle: {\n      fontFamily: 'Libre Baskerville',\n      labelTextColor: '#333333',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#000cff',\n    },\n    chatStyle: {\n      accentColor: '#000cff',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#000cff',\n    },\n    onExitLeadFlowStyle: {\n      color: '#000cff',\n    },\n  },\n  'beautiful-pro': {\n    formsStyle: {\n      fontFamily: 'Lato',\n      labelTextColor: '#666666',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#e5554e',\n    },\n    chatStyle: {\n      accentColor: '#e5554e',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#e5554e',\n    },\n    onExitLeadFlowStyle: {\n      color: '#e5554e',\n    },\n  },\n  'breakthrough-pro': {\n    formsStyle: {\n      fontFamily: 'Alegreya Sans',\n      labelTextColor: '#4e4756',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#4a4f9b',\n    },\n    chatStyle: {\n      accentColor: '#4a4f9b',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#4a4f9b',\n    },\n    onExitLeadFlowStyle: {\n      color: '#4a4f9b',\n    },\n  },\n  'cafe-pro': {\n    formsStyle: {\n      fontFamily: 'Crimson Text',\n      labelTextColor: '#000000',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#000000',\n    },\n    chatStyle: {\n      accentColor: '#000000',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#000000',\n    },\n    onExitLeadFlowStyle: {\n      color: '#000000',\n    },\n  },\n  'daily-dish-pro': {\n    formsStyle: {\n      fontFamily: 'Cormorant',\n      labelTextColor: '#000000',\n      labelTextSize: '20px',\n      submitFontColor: '#ffffff',\n      submitColor: '#d9037f',\n    },\n    chatStyle: {\n      accentColor: '#d9037f',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#d9037f',\n    },\n    onExitLeadFlowStyle: {\n      color: '#d9037f',\n    },\n  },\n  'digital-pro': {\n    formsStyle: {\n      fontFamily: 'Lora',\n      labelTextColor: '#5b5e5e',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#e85555',\n    },\n    chatStyle: {\n      accentColor: '#e85555',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#e85555',\n    },\n    onExitLeadFlowStyle: {\n      color: '#e85555',\n    },\n  },\n  'education-pro': {\n    formsStyle: {\n      fontFamily: 'Roboto Condensed',\n      labelTextColor: '#444444',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#78a7c8',\n    },\n    chatStyle: {\n      accentColor: '#78a7c8',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#78a7c8',\n    },\n    onExitLeadFlowStyle: {\n      color: '#78a7c8',\n    },\n  },\n  'eleven40-pro': {\n    formsStyle: {\n      fontFamily: 'Lora',\n      labelTextColor: '#000000',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#ed702b',\n    },\n    chatStyle: {\n      accentColor: '#ed702b',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#ed702b',\n    },\n    onExitLeadFlowStyle: {\n      color: '#ed702b',\n    },\n  },\n  'enterprise-pro': {\n    formsStyle: {\n      fontFamily: 'Lato',\n      labelTextColor: '#777777',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#31b2ed',\n    },\n    chatStyle: {\n      accentColor: '#31b2ed',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#31b2ed',\n    },\n    onExitLeadFlowStyle: {\n      color: '#31b2ed',\n    },\n  },\n  'essence-pro': {\n    formsStyle: {\n      fontFamily: 'Alegreya Sans',\n      labelTextColor: '#333333',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#be8100',\n    },\n    chatStyle: {\n      accentColor: '#be8100',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#be8100',\n    },\n    onExitLeadFlowStyle: {\n      color: '#be8100',\n    },\n  },\n  'executive-pro': {\n    formsStyle: {\n      fontFamily: 'Open Sans',\n      labelTextColor: '#222222',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#64c9ea',\n    },\n    chatStyle: {\n      accentColor: '#64c9ea',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#64c9ea',\n    },\n    onExitLeadFlowStyle: {\n      color: '#64c9ea',\n    },\n  },\n  'generate-pro': {\n    formsStyle: {\n      fontFamily: 'Source Sans Pro',\n      labelTextColor: '#222222',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#eb232f',\n    },\n    chatStyle: {\n      accentColor: '#eb232f',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#eb232f',\n    },\n    onExitLeadFlowStyle: {\n      color: '#eb232f',\n    },\n  },\n  'infinity-pro': {\n    formsStyle: {\n      fontFamily: 'Cormorant Garamond',\n      labelTextColor: '#000000',\n      labelTextSize: '22px',\n      submitFontColor: '#ffffff',\n      submitColor: '#d43c67',\n    },\n    chatStyle: {\n      accentColor: '#d43c67',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#d43c67',\n    },\n    onExitLeadFlowStyle: {\n      color: '#d43c67',\n    },\n  },\n  'interior-pro': {\n    formsStyle: {\n      fontFamily: 'Lora',\n      labelTextColor: '#777777',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#009092',\n    },\n    chatStyle: {\n      accentColor: '#009092',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#009092',\n    },\n    onExitLeadFlowStyle: {\n      color: '#009092',\n    },\n  },\n  'lifestyle-pro': {\n    formsStyle: {\n      fontFamily: 'Droid Sans',\n      labelTextColor: '#767673',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#27968b',\n    },\n    chatStyle: {\n      accentColor: '#27968b',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#27968b',\n    },\n    onExitLeadFlowStyle: {\n      color: '#27968b',\n    },\n  },\n  'magazine-pro': {\n    formsStyle: {\n      fontFamily: 'Roboto',\n      labelTextColor: '#222222',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#008285',\n    },\n    chatStyle: {\n      accentColor: '#008285',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#008285',\n    },\n    onExitLeadFlowStyle: {\n      color: '#008285',\n    },\n  },\n  'metro-pro': {\n    formsStyle: {\n      fontFamily: 'Helvetica Neue',\n      labelTextColor: '#222222',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#f96e5b',\n    },\n    chatStyle: {\n      accentColor: '#f96e5b',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#f96e5b',\n    },\n    onExitLeadFlowStyle: {\n      color: '#f96e5b',\n    },\n  },\n  'minimum-pro': {\n    formsStyle: {\n      fontFamily: 'Roboto Slab',\n      labelTextColor: '#333333',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#0ebfe9',\n    },\n    chatStyle: {\n      accentColor: '#0ebfe9',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#0ebfe9',\n    },\n    onExitLeadFlowStyle: {\n      color: '#0ebfe9',\n    },\n  },\n  'modern-studio-pro': {\n    formsStyle: {\n      fontFamily: 'Lato',\n      labelTextColor: '#000000',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#000000',\n    },\n    chatStyle: {\n      accentColor: '#000000',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#000000',\n    },\n    onExitLeadFlowStyle: {\n      color: '#000000',\n    },\n  },\n  'monochrome-pro': {\n    formsStyle: {\n      fontFamily: 'Muli',\n      labelTextColor: '#000000',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#0066cc',\n    },\n    chatStyle: {\n      accentColor: '#0066cc',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#0066cc',\n    },\n    onExitLeadFlowStyle: {\n      color: '#0066cc',\n    },\n  },\n  'news-pro': {\n    formsStyle: {\n      fontFamily: 'Raleway',\n      labelTextColor: '#666666',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#ff0000',\n    },\n    chatStyle: {\n      accentColor: '#ff0000',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#ff0000',\n    },\n    onExitLeadFlowStyle: {\n      color: '#ff0000',\n    },\n  },\n  'no-sidebar-pro': {\n    formsStyle: {\n      fontFamily: 'Lato',\n      labelTextColor: '#333333',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#333333',\n    },\n    chatStyle: {\n      accentColor: '#333333',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#333333',\n    },\n    onExitLeadFlowStyle: {\n      color: '#333333',\n    },\n  },\n  'outfitter-pro': {\n    formsStyle: {\n      fontFamily: 'Noto Sans',\n      labelTextColor: '#546e7a',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#000000',\n    },\n    chatStyle: {\n      accentColor: '#000000',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#000000',\n    },\n    onExitLeadFlowStyle: {\n      color: '#000000',\n    },\n  },\n  'outreach-pro': {\n    formsStyle: {\n      fontFamily: 'Lato',\n      labelTextColor: '#333333',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#6ab446',\n    },\n    chatStyle: {\n      accentColor: '#6ab446',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#6ab446',\n    },\n    onExitLeadFlowStyle: {\n      color: '#6ab446',\n    },\n  },\n  'parallax-pro': {\n    formsStyle: {\n      fontFamily: 'Cormorant Garamond',\n      labelTextColor: '#000000',\n      labelTextSize: '22px',\n      submitFontColor: '#ffffff',\n      submitColor: '#00a0af',\n    },\n    chatStyle: {\n      accentColor: '#00a0af',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#00a0af',\n    },\n    onExitLeadFlowStyle: {\n      color: '#00a0af',\n    },\n  },\n  'revolution-pro': {\n    formsStyle: {\n      fontFamily: 'Noto Serif SC',\n      labelTextColor: '#000000',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#008080',\n    },\n    chatStyle: {\n      accentColor: '#008080',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#008080',\n    },\n    onExitLeadFlowStyle: {\n      color: '#008080',\n    },\n  },\n  'sixteen-nine-pro': {\n    formsStyle: {\n      fontFamily: 'Roboto',\n      labelTextColor: '#000000',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#1dbec0',\n    },\n    chatStyle: {\n      accentColor: '#1dbec0',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#1dbec0',\n    },\n    onExitLeadFlowStyle: {\n      color: '#1dbec0',\n    },\n  },\n  'smart-passive-income-pro': {\n    formsStyle: {\n      fontFamily: 'Roboto',\n      labelTextColor: '#333333',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#0e763c',\n    },\n    chatStyle: {\n      accentColor: '#0e763c',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#0e763c',\n    },\n    onExitLeadFlowStyle: {\n      color: '#0e763c',\n    },\n  },\n  'wellness-pro': {\n    formsStyle: {\n      fontFamily: 'Open Sans',\n      labelTextColor: '#000000',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#5da44f',\n    },\n    chatStyle: {\n      accentColor: '#5da44f',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#5da44f',\n    },\n    onExitLeadFlowStyle: {\n      color: '#5da44f',\n    },\n  },\n  'workstation-pro': {\n    formsStyle: {\n      fontFamily: 'Baskerville',\n      labelTextColor: '#222222',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#ff4800',\n    },\n    chatStyle: {\n      accentColor: '#ff4800',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#ff4800',\n    },\n    onExitLeadFlowStyle: {\n      color: '#ff4800',\n    },\n  },\n};\n","import {\n  onInterframeReady,\n  onConnect,\n  onDisconnect,\n  onMarkAsOutdated,\n  onUpgrade,\n  onPageReload,\n  onInitNavigation,\n  onDisableNavigation,\n  onClearQueryParam,\n  onGetDomain,\n  onGetAssetsPayload,\n  onEnterFullScreen,\n  onExitFullScreen,\n} from './api/hubspotPluginApi';\nimport {\n  connect,\n  disconnect,\n  markAsOutdated,\n  getDomain,\n  clearPortalIdPolling,\n} from './api/wordpressApi';\nimport { adminUrl, theme } from './constants/leadinConfig';\nimport { initNavigation, disableNavigation } from './navigation';\nimport enterFullScreen, { exitFullScreen } from './fullscreen';\nimport themes from './constants/themes';\n\nonInterframeReady((message, reply) => {\n  reply('Interframe Ready');\n});\n\nonConnect((portalId, reply) => {\n  connect(\n    portalId,\n    () => {\n      clearPortalIdPolling();\n      reply({ success: true });\n    },\n    reply.bind(null, { success: false })\n  );\n});\n\nonDisconnect((message, reply) => {\n  disconnect(\n    reply.bind(null, { success: true }),\n    reply.bind(null, { success: false })\n  );\n});\n\nonMarkAsOutdated((message, reply) => {\n  markAsOutdated(reply);\n});\n\nonUpgrade((message, reply) => {\n  reply();\n  location.href = `${adminUrl}plugins.php`;\n});\n\nonPageReload((message, reply) => {\n  reply();\n  window.location.reload(true);\n});\n\nonInitNavigation((message, reply) => {\n  reply();\n  initNavigation();\n});\n\nonDisableNavigation((message, reply) => {\n  reply();\n  disableNavigation();\n});\n\nonClearQueryParam((message, reply) => {\n  reply();\n  let currentWindowLocation = window.location.toString();\n  if (currentWindowLocation.indexOf('?') > 0) {\n    currentWindowLocation = currentWindowLocation.substring(\n      0,\n      currentWindowLocation.indexOf('?')\n    );\n  }\n  const newWindowLocation = `${currentWindowLocation}?page=leadin`;\n  window.history.pushState({}, '', newWindowLocation);\n});\n\nonGetDomain((message, reply) => {\n  getDomain(data => {\n    if (data.domain) {\n      reply(data.domain);\n    }\n  });\n});\n\nonGetAssetsPayload((message, reply) => {\n  reply({ payload: themes[theme] });\n});\n\nonEnterFullScreen((message, reply) => {\n  reply();\n  enterFullScreen();\n});\n\nonExitFullScreen((message, reply) => {\n  reply();\n  exitFullScreen();\n});\n","import { domElements } from './constants/selectors';\n\nexport default function enterFullScreen() {\n  jQuery(domElements.iframe).addClass('leadin-iframe-fullscreen');\n}\n\nexport function exitFullScreen() {\n  jQuery(domElements.iframe).removeClass('leadin-iframe-fullscreen');\n}\n","import Raven, { configureRaven } from './lib/Raven';\nimport { initChatflows } from './chatflows';\nimport { portalId } from './constants/leadinConfig';\nimport { initInterframe } from './lib/Interframe';\nimport { startPortalIdPolling } from './api/wordpressApi';\nimport './handlers';\n\nfunction main() {\n  initInterframe();\n\n  // Enable App Navigation only when viewing the plugin\n  if (window.location.search.indexOf('page=leadin') !== -1) {\n    if (!portalId) {\n      startPortalIdPolling();\n    }\n  }\n\n  jQuery(document).ready(initChatflows);\n}\n\nconfigureRaven();\nRaven.context(main);\n"],"sourceRoot":""}
     1{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/raven-js/src/singleton.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/raven-js/src/utils.js","webpack:///./node_modules/raven-js/src/raven.js","webpack:///./node_modules/raven-js/vendor/TraceKit/tracekit.js","webpack:///./node_modules/raven-js/vendor/json-stringify-safe/stringify.js","webpack:///./node_modules/raven-js/src/configError.js","webpack:///./node_modules/raven-js/src/console.js","webpack:///./js/constants/leadinConfig.js","webpack:///./js/lib/Raven.js","webpack:///./js/menu.js","webpack:///./js/utils.js","webpack:///./js/constants/selectors.js","webpack:///./js/lib/Interframe.js","webpack:///./js/lib/EventBus.js","webpack:///./js/api/wordpressApi.js","webpack:///./js/api/hubspotPluginApi.js","webpack:///./js/navigation.js","webpack:///./js/constants/themes.js","webpack:///./js/handlers.js","webpack:///./js/fullscreen.js","webpack:///./js/app.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","global","RavenConstructor","_window","window","self","_Raven","Raven","noConflict","afterLoad","g","this","Function","e","isUndefined","what","isString","toString","supportsErrorEvent","ErrorEvent","each","obj","callback","j","length","hasKey","htmlElementAsString","elem","className","classes","attr","out","tagName","push","toLowerCase","id","split","attrWhitelist","getAttribute","join","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","filename","lineno","colno","isObject","isError","Error","isErrorEvent","isFunction","isEmptyObject","_","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","truncate","str","max","substr","objectFrozen","isFrozen","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","urlencode","pairs","encodeURIComponent","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","Math","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","values","type","stacktrace","parseUrl","url","match","query","fragment","protocol","host","path","relative","fill","replacement","track","orig","TraceKit","stringify","RavenConfigError","utils","wrapConsoleMethod","wrapMethod","dsnKeys","dsnPattern","now","Date","_document","document","_navigator","navigator","keepOriginalCallback","method","_hasJSON","JSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","logger","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","collectWindowErrors","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","console","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","location","_lastHref","href","_resetBackoff","VERSION","debug","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","xhr","dom","instrumentDefaults","tryCatch","install","isSetup","report","subscribe","_handleOnErrorStackInfo","apply","arguments","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","func","args","undefined","wrap","_before","__raven__","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","__inner__","uninstall","_restoreBuiltIns","ex","isNotError","isNotErrorEvent","isErrorEventWithoutError","error","captureMessage","trimHeadFrames","stack","computeStackTrace","_handleStackInfo","msg","test","message","initialCall","fileurl","fingerprint","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","result","shift","addPlugin","plugin","pluginArgs","slice","setUserContext","setExtraContext","extra","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","release","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","RavenConfig","showReportDialog","eventId","encode","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","setTimeout","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","wrappedBuiltIns","wrapTimeFn","fn","Array","originalCallback","wrapEventTarget","proto","capture","secure","handleEvent","err","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","indexOf","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","addEventListener","attachEvent","chrome","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","level","builtin","installer","concat","exec","allowSecretKey","port","stackInfo","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","line","column","function","prefixedMessage","exception","culprit","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","headers","User-Agent","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","_setBackoffState","retry","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sendProcessedPayload","_getUuid","allowDuplicates","event_id","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","opts","XDomainRequest","onload","onerror","open","send","setUser","setReleaseContext","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastExceptionStack","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","augmentStackTraceWithInitialElement","processLastException","groups","_lastExceptionStack","_lastArgs","rethrow","incomplete","handler","unsubscribe","splice","computeStackTraceFromStackProp","submatch","parts","element","gecko","winjs","geckoEval","chromeEval","lines","isNative","columnNumber","initial","unshift","partial","computeStackTraceByWalkingCallerChain","depth","item","functionName","funcs","recursion","curr","caller","input","substring","sourceURL","fileName","lineNumber","description","haystack","needle","serializer","replacer","cycleReplacer","keys","thisPos","Infinity","stringifyError","spaces","getSerialize","constructor","originalConsoleLevel","originalConsole","sentryLevel","leadinConfig","adminUrl","ajaxUrl","env","hubspotBaseUrl","leadinPluginVersion","plugins","phpVersion","portalId","theme","wpVersion","i18n","leadinI18n","addMenuItem","text","jQuery","find","addExternalLinks","chatflowsUrl","emailUrl","chatflows","localStorage","LEADIN_DEBUG","_console","_len","_key","domElements","iframe","allMenuButtons","subMenuButtons","eventBus","EventBus","_classCallCheck","bus","_this$bus","trigger","event","on","callbacks","postMessageObject","contentWindow","postMessage","reply","newMessage","assign","handleMessage","_callbackId","handleResponse","forEach","handleMessageEvent","origin","makeRequest","action","payload","success","ajaxPayload","contentType","jqXHR","responseText","ajax","post","portalPollingTimeout","getPortal","stopPortalPolling","startPortalIdPolling","reload","disconnect","getDomain","markAsOutdated","createHandler","onClearQueryParam","onConnect","onDisableNavigation","onDisconnect","onEnterFullScreen","onExitFullScreen","onGetAssetsPayload","onGetDomain","onInitNavigation","onInterframeReady","onMarkAsOutdated","onPageReload","onUpgrade","changeRoute","route","onResponse","onTimeout","timeoutId","initNavigation","handleNavigation","search","removeClass","pageParam","parent","addClass","setSelectedMenuItem","click","metaKey","altKey","shiftKey","preventDefault","themes","genesis-sample","formsStyle","fontFamily","labelTextColor","labelTextSize","submitFontColor","submitColor","chatStyle","accentColor","onScrollLeadFlowStyle","color","onExitLeadFlowStyle","academy-pro","agency-pro","agentpress-pro","altitude-pro","ambiance-pro","atmosphere-pro","author-pro","authority-pro","beautiful-pro","breakthrough-pro","cafe-pro","daily-dish-pro","digital-pro","education-pro","eleven40-pro","enterprise-pro","essence-pro","executive-pro","generate-pro","infinity-pro","interior-pro","lifestyle-pro","magazine-pro","metro-pro","minimum-pro","modern-studio-pro","monochrome-pro","news-pro","no-sidebar-pro","outfitter-pro","outreach-pro","parallax-pro","revolution-pro","sixteen-nine-pro","smart-passive-income-pro","wellness-pro","workstation-pro","connect","off","currentWindowLocation","newWindowLocation","domain","leadin","php","wordpress","hub","map","Version","ready"],"mappings":"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","file":"leadin.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 \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\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.l = 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// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 8);\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n  typeof window !== 'undefined'\n    ? window\n    : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n  _window.Raven = _Raven;\n  return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var _window =\n  typeof window !== 'undefined'\n    ? window\n    : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n  return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n  switch ({}.toString.call(value)) {\n    case '[object Error]':\n      return true;\n    case '[object Exception]':\n      return true;\n    case '[object DOMException]':\n      return true;\n    default:\n      return value instanceof Error;\n  }\n}\n\nfunction isErrorEvent(value) {\n  return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isUndefined(what) {\n  return what === void 0;\n}\n\nfunction isFunction(what) {\n  return typeof what === 'function';\n}\n\nfunction isString(what) {\n  return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isEmptyObject(what) {\n  for (var _ in what) return false; // eslint-disable-line guard-for-in, no-unused-vars\n  return true;\n}\n\nfunction supportsErrorEvent() {\n  try {\n    new ErrorEvent(''); // eslint-disable-line no-new\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction wrappedCallback(callback) {\n  function dataCallback(data, original) {\n    var normalizedData = callback(data) || data;\n    if (original) {\n      return original(normalizedData) || normalizedData;\n    }\n    return normalizedData;\n  }\n\n  return dataCallback;\n}\n\nfunction each(obj, callback) {\n  var i, j;\n\n  if (isUndefined(obj.length)) {\n    for (i in obj) {\n      if (hasKey(obj, i)) {\n        callback.call(null, i, obj[i]);\n      }\n    }\n  } else {\n    j = obj.length;\n    if (j) {\n      for (i = 0; i < j; i++) {\n        callback.call(null, i, obj[i]);\n      }\n    }\n  }\n}\n\nfunction objectMerge(obj1, obj2) {\n  if (!obj2) {\n    return obj1;\n  }\n  each(obj2, function(key, value) {\n    obj1[key] = value;\n  });\n  return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n  if (!Object.isFrozen) {\n    return false;\n  }\n  return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n  return !max || str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n  return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n  // Combine an array of regular expressions and strings into one large regexp\n  // Be mad.\n  var sources = [],\n    i = 0,\n    len = patterns.length,\n    pattern;\n\n  for (; i < len; i++) {\n    pattern = patterns[i];\n    if (isString(pattern)) {\n      // If it's a string, we need to escape it\n      // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n      sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n    } else if (pattern && pattern.source) {\n      // If it's a regexp already, we want to extract the source\n      sources.push(pattern.source);\n    }\n    // Intentionally skip other cases\n  }\n  return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n  var pairs = [];\n  each(o, function(key, value) {\n    pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n  });\n  return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not <a/> href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n  var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n  if (!match) return {};\n\n  // coerce to undefined values to empty string so we don't get 'undefined'\n  var query = match[6] || '';\n  var fragment = match[8] || '';\n  return {\n    protocol: match[2],\n    host: match[4],\n    path: match[5],\n    relative: match[5] + query + fragment // everything minus origin\n  };\n}\nfunction uuid4() {\n  var crypto = _window.crypto || _window.msCrypto;\n\n  if (!isUndefined(crypto) && crypto.getRandomValues) {\n    // Use window.crypto API if available\n    // eslint-disable-next-line no-undef\n    var arr = new Uint16Array(8);\n    crypto.getRandomValues(arr);\n\n    // set 4 in byte 7\n    arr[3] = (arr[3] & 0xfff) | 0x4000;\n    // set 2 most significant bits of byte 9 to '10'\n    arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n    var pad = function(num) {\n      var v = num.toString(16);\n      while (v.length < 4) {\n        v = '0' + v;\n      }\n      return v;\n    };\n\n    return (\n      pad(arr[0]) +\n      pad(arr[1]) +\n      pad(arr[2]) +\n      pad(arr[3]) +\n      pad(arr[4]) +\n      pad(arr[5]) +\n      pad(arr[6]) +\n      pad(arr[7])\n    );\n  } else {\n    // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n    return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n      var r = (Math.random() * 16) | 0,\n        v = c === 'x' ? r : (r & 0x3) | 0x8;\n      return v.toString(16);\n    });\n  }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n  /* eslint no-extra-parens:0*/\n  var MAX_TRAVERSE_HEIGHT = 5,\n    MAX_OUTPUT_LEN = 80,\n    out = [],\n    height = 0,\n    len = 0,\n    separator = ' > ',\n    sepLength = separator.length,\n    nextStr;\n\n  while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n    nextStr = htmlElementAsString(elem);\n    // bail out if\n    // - nextStr is the 'html' element\n    // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n    //   (ignore this limit if we are on the first iteration)\n    if (\n      nextStr === 'html' ||\n      (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n    ) {\n      break;\n    }\n\n    out.push(nextStr);\n\n    len += nextStr.length;\n    elem = elem.parentNode;\n  }\n\n  return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n  var out = [],\n    className,\n    classes,\n    key,\n    attr,\n    i;\n\n  if (!elem || !elem.tagName) {\n    return '';\n  }\n\n  out.push(elem.tagName.toLowerCase());\n  if (elem.id) {\n    out.push('#' + elem.id);\n  }\n\n  className = elem.className;\n  if (className && isString(className)) {\n    classes = className.split(/\\s+/);\n    for (i = 0; i < classes.length; i++) {\n      out.push('.' + classes[i]);\n    }\n  }\n  var attrWhitelist = ['type', 'name', 'title', 'alt'];\n  for (i = 0; i < attrWhitelist.length; i++) {\n    key = attrWhitelist[i];\n    attr = elem.getAttribute(key);\n    if (attr) {\n      out.push('[' + key + '=\"' + attr + '\"]');\n    }\n  }\n  return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n  return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n  if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n  ex1 = ex1.values[0];\n  ex2 = ex2.values[0];\n\n  if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n  return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n  if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n  var frames1 = stack1.frames;\n  var frames2 = stack2.frames;\n\n  // Exit early if frame count differs\n  if (frames1.length !== frames2.length) return false;\n\n  // Iterate through every frame; bail out if anything differs\n  var a, b;\n  for (var i = 0; i < frames1.length; i++) {\n    a = frames1[i];\n    b = frames2[i];\n    if (\n      a.filename !== b.filename ||\n      a.lineno !== b.lineno ||\n      a.colno !== b.colno ||\n      a['function'] !== b['function']\n    )\n      return false;\n  }\n  return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n  var orig = obj[name];\n  obj[name] = replacement(orig);\n  if (track) {\n    track.push([obj, name, orig]);\n  }\n}\n\nmodule.exports = {\n  isObject: isObject,\n  isError: isError,\n  isErrorEvent: isErrorEvent,\n  isUndefined: isUndefined,\n  isFunction: isFunction,\n  isString: isString,\n  isEmptyObject: isEmptyObject,\n  supportsErrorEvent: supportsErrorEvent,\n  wrappedCallback: wrappedCallback,\n  each: each,\n  objectMerge: objectMerge,\n  truncate: truncate,\n  objectFrozen: objectFrozen,\n  hasKey: hasKey,\n  joinRegExp: joinRegExp,\n  urlencode: urlencode,\n  uuid4: uuid4,\n  htmlTreeAsString: htmlTreeAsString,\n  htmlElementAsString: htmlElementAsString,\n  isSameException: isSameException,\n  isSameStacktrace: isSameStacktrace,\n  parseUrl: parseUrl,\n  fill: fill\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isObject = utils.isObject;\nvar isErrorEvent = utils.isErrorEvent;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n  dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n  return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n  typeof window !== 'undefined'\n    ? window\n    : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n  return isFunction(callback)\n    ? function(data) {\n        return callback(data, original);\n      }\n    : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n  this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n  // Raven can run in contexts where there's no document (react-native)\n  this._hasDocument = !isUndefined(_document);\n  this._hasNavigator = !isUndefined(_navigator);\n  this._lastCapturedException = null;\n  this._lastData = null;\n  this._lastEventId = null;\n  this._globalServer = null;\n  this._globalKey = null;\n  this._globalProject = null;\n  this._globalContext = {};\n  this._globalOptions = {\n    logger: 'javascript',\n    ignoreErrors: [],\n    ignoreUrls: [],\n    whitelistUrls: [],\n    includePaths: [],\n    collectWindowErrors: true,\n    maxMessageLength: 0,\n\n    // By default, truncates URL values to 250 chars\n    maxUrlLength: 250,\n    stackTraceLimit: 50,\n    autoBreadcrumbs: true,\n    instrument: true,\n    sampleRate: 1\n  };\n  this._ignoreOnError = 0;\n  this._isRavenInstalled = false;\n  this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n  // capture references to window.console *and* all its methods first\n  // before the console plugin has a chance to monkey patch\n  this._originalConsole = _window.console || {};\n  this._originalConsoleMethods = {};\n  this._plugins = [];\n  this._startTime = now();\n  this._wrappedBuiltIns = [];\n  this._breadcrumbs = [];\n  this._lastCapturedEvent = null;\n  this._keypressTimeout;\n  this._location = _window.location;\n  this._lastHref = this._location && this._location.href;\n  this._resetBackoff();\n\n  // eslint-disable-next-line guard-for-in\n  for (var method in this._originalConsole) {\n    this._originalConsoleMethods[method] = this._originalConsole[method];\n  }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n  // Hardcode version string so that raven source can be loaded directly via\n  // webpack (using a build step causes webpack #1617). Grunt verifies that\n  // this value matches package.json during build.\n  //   See: https://github.com/getsentry/raven-js/issues/465\n  VERSION: '3.19.1',\n\n  debug: false,\n\n  TraceKit: TraceKit, // alias to TraceKit\n\n  /*\n     * Configure Raven with a DSN and extra options\n     *\n     * @param {string} dsn The public Sentry DSN\n     * @param {object} options Set of global options [optional]\n     * @return {Raven}\n     */\n  config: function(dsn, options) {\n    var self = this;\n\n    if (self._globalServer) {\n      this._logDebug('error', 'Error: Raven has already been configured');\n      return self;\n    }\n    if (!dsn) return self;\n\n    var globalOptions = self._globalOptions;\n\n    // merge in options\n    if (options) {\n      each(options, function(key, value) {\n        // tags and extra are special and need to be put into context\n        if (key === 'tags' || key === 'extra' || key === 'user') {\n          self._globalContext[key] = value;\n        } else {\n          globalOptions[key] = value;\n        }\n      });\n    }\n\n    self.setDSN(dsn);\n\n    // \"Script error.\" is hard coded into browsers for errors that it can't read.\n    // this is the result of a script being pulled in from an external domain and CORS.\n    globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n    globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n    // join regexp rules into one big rule\n    globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n    globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n      ? joinRegExp(globalOptions.ignoreUrls)\n      : false;\n    globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n      ? joinRegExp(globalOptions.whitelistUrls)\n      : false;\n    globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n    globalOptions.maxBreadcrumbs = Math.max(\n      0,\n      Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n    ); // default and hard limit is 100\n\n    var autoBreadcrumbDefaults = {\n      xhr: true,\n      console: true,\n      dom: true,\n      location: true\n    };\n\n    var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n    if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n      autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n    } else if (autoBreadcrumbs !== false) {\n      autoBreadcrumbs = autoBreadcrumbDefaults;\n    }\n    globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n    var instrumentDefaults = {\n      tryCatch: true\n    };\n\n    var instrument = globalOptions.instrument;\n    if ({}.toString.call(instrument) === '[object Object]') {\n      instrument = objectMerge(instrumentDefaults, instrument);\n    } else if (instrument !== false) {\n      instrument = instrumentDefaults;\n    }\n    globalOptions.instrument = instrument;\n\n    TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n    // return for chaining\n    return self;\n  },\n\n  /*\n     * Installs a global window.onerror error handler\n     * to capture and report uncaught exceptions.\n     * At this point, install() is required to be called due\n     * to the way TraceKit is set up.\n     *\n     * @return {Raven}\n     */\n  install: function() {\n    var self = this;\n    if (self.isSetup() && !self._isRavenInstalled) {\n      TraceKit.report.subscribe(function() {\n        self._handleOnErrorStackInfo.apply(self, arguments);\n      });\n      if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n        self._instrumentTryCatch();\n      }\n\n      if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n      // Install all of the plugins\n      self._drainPlugins();\n\n      self._isRavenInstalled = true;\n    }\n\n    Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n    return this;\n  },\n\n  /*\n     * Set the DSN (can be called multiple time unlike config)\n     *\n     * @param {string} dsn The public Sentry DSN\n     */\n  setDSN: function(dsn) {\n    var self = this,\n      uri = self._parseDSN(dsn),\n      lastSlash = uri.path.lastIndexOf('/'),\n      path = uri.path.substr(1, lastSlash);\n\n    self._dsn = dsn;\n    self._globalKey = uri.user;\n    self._globalSecret = uri.pass && uri.pass.substr(1);\n    self._globalProject = uri.path.substr(lastSlash + 1);\n\n    self._globalServer = self._getGlobalServer(uri);\n\n    self._globalEndpoint =\n      self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n    // Reset backoff state since we may be pointing at a\n    // new project/server\n    this._resetBackoff();\n  },\n\n  /*\n     * Wrap code within a context so Raven can capture errors\n     * reliably across domains that is executed immediately.\n     *\n     * @param {object} options A specific set of options for this context [optional]\n     * @param {function} func The callback to be immediately executed within the context\n     * @param {array} args An array of arguments to be called with the callback [optional]\n     */\n  context: function(options, func, args) {\n    if (isFunction(options)) {\n      args = func || [];\n      func = options;\n      options = undefined;\n    }\n\n    return this.wrap(options, func).apply(this, args);\n  },\n\n  /*\n     * Wrap code within a context and returns back a new function to be executed\n     *\n     * @param {object} options A specific set of options for this context [optional]\n     * @param {function} func The function to be wrapped in a new context\n     * @param {function} func A function to call before the try/catch wrapper [optional, private]\n     * @return {function} The newly wrapped functions with a context\n     */\n  wrap: function(options, func, _before) {\n    var self = this;\n    // 1 argument has been passed, and it's not a function\n    // so just return it\n    if (isUndefined(func) && !isFunction(options)) {\n      return options;\n    }\n\n    // options is optional\n    if (isFunction(options)) {\n      func = options;\n      options = undefined;\n    }\n\n    // At this point, we've passed along 2 arguments, and the second one\n    // is not a function either, so we'll just return the second argument.\n    if (!isFunction(func)) {\n      return func;\n    }\n\n    // We don't wanna wrap it twice!\n    try {\n      if (func.__raven__) {\n        return func;\n      }\n\n      // If this has already been wrapped in the past, return that\n      if (func.__raven_wrapper__) {\n        return func.__raven_wrapper__;\n      }\n    } catch (e) {\n      // Just accessing custom props in some Selenium environments\n      // can cause a \"Permission denied\" exception (see raven-js#495).\n      // Bail on wrapping and return the function as-is (defers to window.onerror).\n      return func;\n    }\n\n    function wrapped() {\n      var args = [],\n        i = arguments.length,\n        deep = !options || (options && options.deep !== false);\n\n      if (_before && isFunction(_before)) {\n        _before.apply(this, arguments);\n      }\n\n      // Recursively wrap all of a function's arguments that are\n      // functions themselves.\n      while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n      try {\n        // Attempt to invoke user-land function\n        // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n        //       means Raven caught an error invoking your application code. This is\n        //       expected behavior and NOT indicative of a bug with Raven.js.\n        return func.apply(this, args);\n      } catch (e) {\n        self._ignoreNextOnError();\n        self.captureException(e, options);\n        throw e;\n      }\n    }\n\n    // copy over properties of the old function\n    for (var property in func) {\n      if (hasKey(func, property)) {\n        wrapped[property] = func[property];\n      }\n    }\n    wrapped.prototype = func.prototype;\n\n    func.__raven_wrapper__ = wrapped;\n    // Signal that this function has been wrapped already\n    // for both debugging and to prevent it to being wrapped twice\n    wrapped.__raven__ = true;\n    wrapped.__inner__ = func;\n\n    return wrapped;\n  },\n\n  /*\n     * Uninstalls the global error handler.\n     *\n     * @return {Raven}\n     */\n  uninstall: function() {\n    TraceKit.report.uninstall();\n\n    this._restoreBuiltIns();\n\n    Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n    this._isRavenInstalled = false;\n\n    return this;\n  },\n\n  /*\n     * Manually capture an exception and send it over to Sentry\n     *\n     * @param {error} ex An exception to be logged\n     * @param {object} options A specific set of options for this error [optional]\n     * @return {Raven}\n     */\n  captureException: function(ex, options) {\n    // Cases for sending ex as a message, rather than an exception\n    var isNotError = !isError(ex);\n    var isNotErrorEvent = !isErrorEvent(ex);\n    var isErrorEventWithoutError = isErrorEvent(ex) && !ex.error;\n\n    if ((isNotError && isNotErrorEvent) || isErrorEventWithoutError) {\n      return this.captureMessage(\n        ex,\n        objectMerge(\n          {\n            trimHeadFrames: 1,\n            stacktrace: true // if we fall back to captureMessage, default to attempting a new trace\n          },\n          options\n        )\n      );\n    }\n\n    // Get actual Error from ErrorEvent\n    if (isErrorEvent(ex)) ex = ex.error;\n\n    // Store the raw exception object for potential debugging and introspection\n    this._lastCapturedException = ex;\n\n    // TraceKit.report will re-raise any exception passed to it,\n    // which means you have to wrap it in try/catch. Instead, we\n    // can wrap it here and only re-raise if TraceKit.report\n    // raises an exception different from the one we asked to\n    // report on.\n    try {\n      var stack = TraceKit.computeStackTrace(ex);\n      this._handleStackInfo(stack, options);\n    } catch (ex1) {\n      if (ex !== ex1) {\n        throw ex1;\n      }\n    }\n\n    return this;\n  },\n\n  /*\n     * Manually send a message to Sentry\n     *\n     * @param {string} msg A plain message to be captured in Sentry\n     * @param {object} options A specific set of options for this message [optional]\n     * @return {Raven}\n     */\n  captureMessage: function(msg, options) {\n    // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n    // early call; we'll error on the side of logging anything called before configuration since it's\n    // probably something you should see:\n    if (\n      !!this._globalOptions.ignoreErrors.test &&\n      this._globalOptions.ignoreErrors.test(msg)\n    ) {\n      return;\n    }\n\n    options = options || {};\n\n    var data = objectMerge(\n      {\n        message: msg + '' // Make sure it's actually a string\n      },\n      options\n    );\n\n    var ex;\n    // Generate a \"synthetic\" stack trace from this point.\n    // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n    //       of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n    //       or if it catches a thrown object without a \"stack\" property.\n    try {\n      throw new Error(msg);\n    } catch (ex1) {\n      ex = ex1;\n    }\n\n    // null exception name so `Error` isn't prefixed to msg\n    ex.name = null;\n    var stack = TraceKit.computeStackTrace(ex);\n\n    // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n    var initialCall = stack.stack[1];\n\n    var fileurl = (initialCall && initialCall.url) || '';\n\n    if (\n      !!this._globalOptions.ignoreUrls.test &&\n      this._globalOptions.ignoreUrls.test(fileurl)\n    ) {\n      return;\n    }\n\n    if (\n      !!this._globalOptions.whitelistUrls.test &&\n      !this._globalOptions.whitelistUrls.test(fileurl)\n    ) {\n      return;\n    }\n\n    if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n      options = objectMerge(\n        {\n          // fingerprint on msg, not stack trace (legacy behavior, could be\n          // revisited)\n          fingerprint: msg,\n          // since we know this is a synthetic trace, the top N-most frames\n          // MUST be from Raven.js, so mark them as in_app later by setting\n          // trimHeadFrames\n          trimHeadFrames: (options.trimHeadFrames || 0) + 1\n        },\n        options\n      );\n\n      var frames = this._prepareFrames(stack, options);\n      data.stacktrace = {\n        // Sentry expects frames oldest to newest\n        frames: frames.reverse()\n      };\n    }\n\n    // Fire away!\n    this._send(data);\n\n    return this;\n  },\n\n  captureBreadcrumb: function(obj) {\n    var crumb = objectMerge(\n      {\n        timestamp: now() / 1000\n      },\n      obj\n    );\n\n    if (isFunction(this._globalOptions.breadcrumbCallback)) {\n      var result = this._globalOptions.breadcrumbCallback(crumb);\n\n      if (isObject(result) && !isEmptyObject(result)) {\n        crumb = result;\n      } else if (result === false) {\n        return this;\n      }\n    }\n\n    this._breadcrumbs.push(crumb);\n    if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n      this._breadcrumbs.shift();\n    }\n    return this;\n  },\n\n  addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n    var pluginArgs = [].slice.call(arguments, 1);\n\n    this._plugins.push([plugin, pluginArgs]);\n    if (this._isRavenInstalled) {\n      this._drainPlugins();\n    }\n\n    return this;\n  },\n\n  /*\n     * Set/clear a user to be sent along with the payload.\n     *\n     * @param {object} user An object representing user data [optional]\n     * @return {Raven}\n     */\n  setUserContext: function(user) {\n    // Intentionally do not merge here since that's an unexpected behavior.\n    this._globalContext.user = user;\n\n    return this;\n  },\n\n  /*\n     * Merge extra attributes to be sent along with the payload.\n     *\n     * @param {object} extra An object representing extra data [optional]\n     * @return {Raven}\n     */\n  setExtraContext: function(extra) {\n    this._mergeContext('extra', extra);\n\n    return this;\n  },\n\n  /*\n     * Merge tags to be sent along with the payload.\n     *\n     * @param {object} tags An object representing tags [optional]\n     * @return {Raven}\n     */\n  setTagsContext: function(tags) {\n    this._mergeContext('tags', tags);\n\n    return this;\n  },\n\n  /*\n     * Clear all of the context.\n     *\n     * @return {Raven}\n     */\n  clearContext: function() {\n    this._globalContext = {};\n\n    return this;\n  },\n\n  /*\n     * Get a copy of the current context. This cannot be mutated.\n     *\n     * @return {object} copy of context\n     */\n  getContext: function() {\n    // lol javascript\n    return JSON.parse(stringify(this._globalContext));\n  },\n\n  /*\n     * Set environment of application\n     *\n     * @param {string} environment Typically something like 'production'.\n     * @return {Raven}\n     */\n  setEnvironment: function(environment) {\n    this._globalOptions.environment = environment;\n\n    return this;\n  },\n\n  /*\n     * Set release version of application\n     *\n     * @param {string} release Typically something like a git SHA to identify version\n     * @return {Raven}\n     */\n  setRelease: function(release) {\n    this._globalOptions.release = release;\n\n    return this;\n  },\n\n  /*\n     * Set the dataCallback option\n     *\n     * @param {function} callback The callback to run which allows the\n     *                            data blob to be mutated before sending\n     * @return {Raven}\n     */\n  setDataCallback: function(callback) {\n    var original = this._globalOptions.dataCallback;\n    this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n    return this;\n  },\n\n  /*\n     * Set the breadcrumbCallback option\n     *\n     * @param {function} callback The callback to run which allows filtering\n     *                            or mutating breadcrumbs\n     * @return {Raven}\n     */\n  setBreadcrumbCallback: function(callback) {\n    var original = this._globalOptions.breadcrumbCallback;\n    this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n    return this;\n  },\n\n  /*\n     * Set the shouldSendCallback option\n     *\n     * @param {function} callback The callback to run which allows\n     *                            introspecting the blob before sending\n     * @return {Raven}\n     */\n  setShouldSendCallback: function(callback) {\n    var original = this._globalOptions.shouldSendCallback;\n    this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n    return this;\n  },\n\n  /**\n     * Override the default HTTP transport mechanism that transmits data\n     * to the Sentry server.\n     *\n     * @param {function} transport Function invoked instead of the default\n     *                             `makeRequest` handler.\n     *\n     * @return {Raven}\n     */\n  setTransport: function(transport) {\n    this._globalOptions.transport = transport;\n\n    return this;\n  },\n\n  /*\n     * Get the latest raw exception that was captured by Raven.\n     *\n     * @return {error}\n     */\n  lastException: function() {\n    return this._lastCapturedException;\n  },\n\n  /*\n     * Get the last event id\n     *\n     * @return {string}\n     */\n  lastEventId: function() {\n    return this._lastEventId;\n  },\n\n  /*\n     * Determine if Raven is setup and ready to go.\n     *\n     * @return {boolean}\n     */\n  isSetup: function() {\n    if (!this._hasJSON) return false; // needs JSON support\n    if (!this._globalServer) {\n      if (!this.ravenNotConfiguredError) {\n        this.ravenNotConfiguredError = true;\n        this._logDebug('error', 'Error: Raven has not been configured.');\n      }\n      return false;\n    }\n    return true;\n  },\n\n  afterLoad: function() {\n    // TODO: remove window dependence?\n\n    // Attempt to initialize Raven on load\n    var RavenConfig = _window.RavenConfig;\n    if (RavenConfig) {\n      this.config(RavenConfig.dsn, RavenConfig.config).install();\n    }\n  },\n\n  showReportDialog: function(options) {\n    if (\n      !_document // doesn't work without a document (React native)\n    )\n      return;\n\n    options = options || {};\n\n    var lastEventId = options.eventId || this.lastEventId();\n    if (!lastEventId) {\n      throw new RavenConfigError('Missing eventId');\n    }\n\n    var dsn = options.dsn || this._dsn;\n    if (!dsn) {\n      throw new RavenConfigError('Missing DSN');\n    }\n\n    var encode = encodeURIComponent;\n    var qs = '';\n    qs += '?eventId=' + encode(lastEventId);\n    qs += '&dsn=' + encode(dsn);\n\n    var user = options.user || this._globalContext.user;\n    if (user) {\n      if (user.name) qs += '&name=' + encode(user.name);\n      if (user.email) qs += '&email=' + encode(user.email);\n    }\n\n    var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n    var script = _document.createElement('script');\n    script.async = true;\n    script.src = globalServer + '/api/embed/error-page/' + qs;\n    (_document.head || _document.body).appendChild(script);\n  },\n\n  /**** Private functions ****/\n  _ignoreNextOnError: function() {\n    var self = this;\n    this._ignoreOnError += 1;\n    setTimeout(function() {\n      // onerror should trigger before setTimeout\n      self._ignoreOnError -= 1;\n    });\n  },\n\n  _triggerEvent: function(eventType, options) {\n    // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n    var evt, key;\n\n    if (!this._hasDocument) return;\n\n    options = options || {};\n\n    eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n    if (_document.createEvent) {\n      evt = _document.createEvent('HTMLEvents');\n      evt.initEvent(eventType, true, true);\n    } else {\n      evt = _document.createEventObject();\n      evt.eventType = eventType;\n    }\n\n    for (key in options)\n      if (hasKey(options, key)) {\n        evt[key] = options[key];\n      }\n\n    if (_document.createEvent) {\n      // IE9 if standards\n      _document.dispatchEvent(evt);\n    } else {\n      // IE8 regardless of Quirks or Standards\n      // IE9 if quirks\n      try {\n        _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n      } catch (e) {\n        // Do nothing\n      }\n    }\n  },\n\n  /**\n     * Wraps addEventListener to capture UI breadcrumbs\n     * @param evtName the event name (e.g. \"click\")\n     * @returns {Function}\n     * @private\n     */\n  _breadcrumbEventHandler: function(evtName) {\n    var self = this;\n    return function(evt) {\n      // reset keypress timeout; e.g. triggering a 'click' after\n      // a 'keypress' will reset the keypress debounce so that a new\n      // set of keypresses can be recorded\n      self._keypressTimeout = null;\n\n      // It's possible this handler might trigger multiple times for the same\n      // event (e.g. event propagation through node ancestors). Ignore if we've\n      // already captured the event.\n      if (self._lastCapturedEvent === evt) return;\n\n      self._lastCapturedEvent = evt;\n\n      // try/catch both:\n      // - accessing evt.target (see getsentry/raven-js#838, #768)\n      // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n      //   can throw an exception in some circumstances.\n      var target;\n      try {\n        target = htmlTreeAsString(evt.target);\n      } catch (e) {\n        target = '<unknown>';\n      }\n\n      self.captureBreadcrumb({\n        category: 'ui.' + evtName, // e.g. ui.click, ui.input\n        message: target\n      });\n    };\n  },\n\n  /**\n     * Wraps addEventListener to capture keypress UI events\n     * @returns {Function}\n     * @private\n     */\n  _keypressEventHandler: function() {\n    var self = this,\n      debounceDuration = 1000; // milliseconds\n\n    // TODO: if somehow user switches keypress target before\n    //       debounce timeout is triggered, we will only capture\n    //       a single breadcrumb from the FIRST target (acceptable?)\n    return function(evt) {\n      var target;\n      try {\n        target = evt.target;\n      } catch (e) {\n        // just accessing event properties can throw an exception in some rare circumstances\n        // see: https://github.com/getsentry/raven-js/issues/838\n        return;\n      }\n      var tagName = target && target.tagName;\n\n      // only consider keypress events on actual input elements\n      // this will disregard keypresses targeting body (e.g. tabbing\n      // through elements, hotkeys, etc)\n      if (\n        !tagName ||\n        (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n      )\n        return;\n\n      // record first keypress in a series, but ignore subsequent\n      // keypresses until debounce clears\n      var timeout = self._keypressTimeout;\n      if (!timeout) {\n        self._breadcrumbEventHandler('input')(evt);\n      }\n      clearTimeout(timeout);\n      self._keypressTimeout = setTimeout(function() {\n        self._keypressTimeout = null;\n      }, debounceDuration);\n    };\n  },\n\n  /**\n     * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n     * @param to the originating URL\n     * @param from the target URL\n     * @private\n     */\n  _captureUrlChange: function(from, to) {\n    var parsedLoc = parseUrl(this._location.href);\n    var parsedTo = parseUrl(to);\n    var parsedFrom = parseUrl(from);\n\n    // because onpopstate only tells you the \"new\" (to) value of location.href, and\n    // not the previous (from) value, we need to track the value of the current URL\n    // state ourselves\n    this._lastHref = to;\n\n    // Use only the path component of the URL if the URL matches the current\n    // document (almost all the time when using pushState)\n    if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n      to = parsedTo.relative;\n    if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n      from = parsedFrom.relative;\n\n    this.captureBreadcrumb({\n      category: 'navigation',\n      data: {\n        to: to,\n        from: from\n      }\n    });\n  },\n\n  /**\n     * Wrap timer functions and event targets to catch errors and provide\n     * better metadata.\n     */\n  _instrumentTryCatch: function() {\n    var self = this;\n\n    var wrappedBuiltIns = self._wrappedBuiltIns;\n\n    function wrapTimeFn(orig) {\n      return function(fn, t) {\n        // preserve arity\n        // Make a copy of the arguments to prevent deoptimization\n        // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n        var args = new Array(arguments.length);\n        for (var i = 0; i < args.length; ++i) {\n          args[i] = arguments[i];\n        }\n        var originalCallback = args[0];\n        if (isFunction(originalCallback)) {\n          args[0] = self.wrap(originalCallback);\n        }\n\n        // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n        // also supports only two arguments and doesn't care what this is, so we\n        // can just call the original function directly.\n        if (orig.apply) {\n          return orig.apply(this, args);\n        } else {\n          return orig(args[0], args[1]);\n        }\n      };\n    }\n\n    var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n    function wrapEventTarget(global) {\n      var proto = _window[global] && _window[global].prototype;\n      if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n        fill(\n          proto,\n          'addEventListener',\n          function(orig) {\n            return function(evtName, fn, capture, secure) {\n              // preserve arity\n              try {\n                if (fn && fn.handleEvent) {\n                  fn.handleEvent = self.wrap(fn.handleEvent);\n                }\n              } catch (err) {\n                // can sometimes get 'Permission denied to access property \"handle Event'\n              }\n\n              // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n              // so that we don't have more than one wrapper function\n              var before, clickHandler, keypressHandler;\n\n              if (\n                autoBreadcrumbs &&\n                autoBreadcrumbs.dom &&\n                (global === 'EventTarget' || global === 'Node')\n              ) {\n                // NOTE: generating multiple handlers per addEventListener invocation, should\n                //       revisit and verify we can just use one (almost certainly)\n                clickHandler = self._breadcrumbEventHandler('click');\n                keypressHandler = self._keypressEventHandler();\n                before = function(evt) {\n                  // need to intercept every DOM event in `before` argument, in case that\n                  // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n                  // see #724\n                  if (!evt) return;\n\n                  var eventType;\n                  try {\n                    eventType = evt.type;\n                  } catch (e) {\n                    // just accessing event properties can throw an exception in some rare circumstances\n                    // see: https://github.com/getsentry/raven-js/issues/838\n                    return;\n                  }\n                  if (eventType === 'click') return clickHandler(evt);\n                  else if (eventType === 'keypress') return keypressHandler(evt);\n                };\n              }\n              return orig.call(\n                this,\n                evtName,\n                self.wrap(fn, undefined, before),\n                capture,\n                secure\n              );\n            };\n          },\n          wrappedBuiltIns\n        );\n        fill(\n          proto,\n          'removeEventListener',\n          function(orig) {\n            return function(evt, fn, capture, secure) {\n              try {\n                fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n              } catch (e) {\n                // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n              }\n              return orig.call(this, evt, fn, capture, secure);\n            };\n          },\n          wrappedBuiltIns\n        );\n      }\n    }\n\n    fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n    fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n    if (_window.requestAnimationFrame) {\n      fill(\n        _window,\n        'requestAnimationFrame',\n        function(orig) {\n          return function(cb) {\n            return orig(self.wrap(cb));\n          };\n        },\n        wrappedBuiltIns\n      );\n    }\n\n    // event targets borrowed from bugsnag-js:\n    // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n    var eventTargets = [\n      'EventTarget',\n      'Window',\n      'Node',\n      'ApplicationCache',\n      'AudioTrackList',\n      'ChannelMergerNode',\n      'CryptoOperation',\n      'EventSource',\n      'FileReader',\n      'HTMLUnknownElement',\n      'IDBDatabase',\n      'IDBRequest',\n      'IDBTransaction',\n      'KeyOperation',\n      'MediaController',\n      'MessagePort',\n      'ModalWindow',\n      'Notification',\n      'SVGElementInstance',\n      'Screen',\n      'TextTrack',\n      'TextTrackCue',\n      'TextTrackList',\n      'WebSocket',\n      'WebSocketWorker',\n      'Worker',\n      'XMLHttpRequest',\n      'XMLHttpRequestEventTarget',\n      'XMLHttpRequestUpload'\n    ];\n    for (var i = 0; i < eventTargets.length; i++) {\n      wrapEventTarget(eventTargets[i]);\n    }\n  },\n\n  /**\n     * Instrument browser built-ins w/ breadcrumb capturing\n     *  - XMLHttpRequests\n     *  - DOM interactions (click/typing)\n     *  - window.location changes\n     *  - console\n     *\n     * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n     */\n  _instrumentBreadcrumbs: function() {\n    var self = this;\n    var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n    var wrappedBuiltIns = self._wrappedBuiltIns;\n\n    function wrapProp(prop, xhr) {\n      if (prop in xhr && isFunction(xhr[prop])) {\n        fill(xhr, prop, function(orig) {\n          return self.wrap(orig);\n        }); // intentionally don't track filled methods on XHR instances\n      }\n    }\n\n    if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n      var xhrproto = XMLHttpRequest.prototype;\n      fill(\n        xhrproto,\n        'open',\n        function(origOpen) {\n          return function(method, url) {\n            // preserve arity\n\n            // if Sentry key appears in URL, don't capture\n            if (isString(url) && url.indexOf(self._globalKey) === -1) {\n              this.__raven_xhr = {\n                method: method,\n                url: url,\n                status_code: null\n              };\n            }\n\n            return origOpen.apply(this, arguments);\n          };\n        },\n        wrappedBuiltIns\n      );\n\n      fill(\n        xhrproto,\n        'send',\n        function(origSend) {\n          return function(data) {\n            // preserve arity\n            var xhr = this;\n\n            function onreadystatechangeHandler() {\n              if (xhr.__raven_xhr && xhr.readyState === 4) {\n                try {\n                  // touching statusCode in some platforms throws\n                  // an exception\n                  xhr.__raven_xhr.status_code = xhr.status;\n                } catch (e) {\n                  /* do nothing */\n                }\n\n                self.captureBreadcrumb({\n                  type: 'http',\n                  category: 'xhr',\n                  data: xhr.__raven_xhr\n                });\n              }\n            }\n\n            var props = ['onload', 'onerror', 'onprogress'];\n            for (var j = 0; j < props.length; j++) {\n              wrapProp(props[j], xhr);\n            }\n\n            if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n              fill(\n                xhr,\n                'onreadystatechange',\n                function(orig) {\n                  return self.wrap(orig, undefined, onreadystatechangeHandler);\n                } /* intentionally don't track this instrumentation */\n              );\n            } else {\n              // if onreadystatechange wasn't actually set by the page on this xhr, we\n              // are free to set our own and capture the breadcrumb\n              xhr.onreadystatechange = onreadystatechangeHandler;\n            }\n\n            return origSend.apply(this, arguments);\n          };\n        },\n        wrappedBuiltIns\n      );\n    }\n\n    if (autoBreadcrumbs.xhr && 'fetch' in _window) {\n      fill(\n        _window,\n        'fetch',\n        function(origFetch) {\n          return function(fn, t) {\n            // preserve arity\n            // Make a copy of the arguments to prevent deoptimization\n            // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n            var args = new Array(arguments.length);\n            for (var i = 0; i < args.length; ++i) {\n              args[i] = arguments[i];\n            }\n\n            var fetchInput = args[0];\n            var method = 'GET';\n            var url;\n\n            if (typeof fetchInput === 'string') {\n              url = fetchInput;\n            } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n              url = fetchInput.url;\n              if (fetchInput.method) {\n                method = fetchInput.method;\n              }\n            } else {\n              url = '' + fetchInput;\n            }\n\n            if (args[1] && args[1].method) {\n              method = args[1].method;\n            }\n\n            var fetchData = {\n              method: method,\n              url: url,\n              status_code: null\n            };\n\n            self.captureBreadcrumb({\n              type: 'http',\n              category: 'fetch',\n              data: fetchData\n            });\n\n            return origFetch.apply(this, args).then(function(response) {\n              fetchData.status_code = response.status;\n\n              return response;\n            });\n          };\n        },\n        wrappedBuiltIns\n      );\n    }\n\n    // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n    // to the document. Do this before we instrument addEventListener.\n    if (autoBreadcrumbs.dom && this._hasDocument) {\n      if (_document.addEventListener) {\n        _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n        _document.addEventListener('keypress', self._keypressEventHandler(), false);\n      } else {\n        // IE8 Compatibility\n        _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n        _document.attachEvent('onkeypress', self._keypressEventHandler());\n      }\n    }\n\n    // record navigation (URL) changes\n    // NOTE: in Chrome App environment, touching history.pushState, *even inside\n    //       a try/catch block*, will cause Chrome to output an error to console.error\n    // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n    var chrome = _window.chrome;\n    var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n    var hasPushAndReplaceState =\n      !isChromePackagedApp &&\n      _window.history &&\n      history.pushState &&\n      history.replaceState;\n    if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n      // TODO: remove onpopstate handler on uninstall()\n      var oldOnPopState = _window.onpopstate;\n      _window.onpopstate = function() {\n        var currentHref = self._location.href;\n        self._captureUrlChange(self._lastHref, currentHref);\n\n        if (oldOnPopState) {\n          return oldOnPopState.apply(this, arguments);\n        }\n      };\n\n      var historyReplacementFunction = function(origHistFunction) {\n        // note history.pushState.length is 0; intentionally not declaring\n        // params to preserve 0 arity\n        return function(/* state, title, url */) {\n          var url = arguments.length > 2 ? arguments[2] : undefined;\n\n          // url argument is optional\n          if (url) {\n            // coerce to string (this is what pushState does)\n            self._captureUrlChange(self._lastHref, url + '');\n          }\n\n          return origHistFunction.apply(this, arguments);\n        };\n      };\n\n      fill(history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n      fill(history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n    }\n\n    if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n      // console\n      var consoleMethodCallback = function(msg, data) {\n        self.captureBreadcrumb({\n          message: msg,\n          level: data.level,\n          category: 'console'\n        });\n      };\n\n      each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n        wrapConsoleMethod(console, level, consoleMethodCallback);\n      });\n    }\n  },\n\n  _restoreBuiltIns: function() {\n    // restore any wrapped builtins\n    var builtin;\n    while (this._wrappedBuiltIns.length) {\n      builtin = this._wrappedBuiltIns.shift();\n\n      var obj = builtin[0],\n        name = builtin[1],\n        orig = builtin[2];\n\n      obj[name] = orig;\n    }\n  },\n\n  _drainPlugins: function() {\n    var self = this;\n\n    // FIX ME TODO\n    each(this._plugins, function(_, plugin) {\n      var installer = plugin[0];\n      var args = plugin[1];\n      installer.apply(self, [self].concat(args));\n    });\n  },\n\n  _parseDSN: function(str) {\n    var m = dsnPattern.exec(str),\n      dsn = {},\n      i = 7;\n\n    try {\n      while (i--) dsn[dsnKeys[i]] = m[i] || '';\n    } catch (e) {\n      throw new RavenConfigError('Invalid DSN: ' + str);\n    }\n\n    if (dsn.pass && !this._globalOptions.allowSecretKey) {\n      throw new RavenConfigError(\n        'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n      );\n    }\n\n    return dsn;\n  },\n\n  _getGlobalServer: function(uri) {\n    // assemble the endpoint from the uri pieces\n    var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n    if (uri.protocol) {\n      globalServer = uri.protocol + ':' + globalServer;\n    }\n    return globalServer;\n  },\n\n  _handleOnErrorStackInfo: function() {\n    // if we are intentionally ignoring errors via onerror, bail out\n    if (!this._ignoreOnError) {\n      this._handleStackInfo.apply(this, arguments);\n    }\n  },\n\n  _handleStackInfo: function(stackInfo, options) {\n    var frames = this._prepareFrames(stackInfo, options);\n\n    this._triggerEvent('handle', {\n      stackInfo: stackInfo,\n      options: options\n    });\n\n    this._processException(\n      stackInfo.name,\n      stackInfo.message,\n      stackInfo.url,\n      stackInfo.lineno,\n      frames,\n      options\n    );\n  },\n\n  _prepareFrames: function(stackInfo, options) {\n    var self = this;\n    var frames = [];\n    if (stackInfo.stack && stackInfo.stack.length) {\n      each(stackInfo.stack, function(i, stack) {\n        var frame = self._normalizeFrame(stack, stackInfo.url);\n        if (frame) {\n          frames.push(frame);\n        }\n      });\n\n      // e.g. frames captured via captureMessage throw\n      if (options && options.trimHeadFrames) {\n        for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n          frames[j].in_app = false;\n        }\n      }\n    }\n    frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n    return frames;\n  },\n\n  _normalizeFrame: function(frame, stackInfoUrl) {\n    // normalize the frames data\n    var normalized = {\n      filename: frame.url,\n      lineno: frame.line,\n      colno: frame.column,\n      function: frame.func || '?'\n    };\n\n    // Case when we don't have any information about the error\n    // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n    // Generating synthetic error doesn't add any value here\n    //\n    // We should probably somehow let a user know that they should fix their code\n    if (!frame.url) {\n      normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n    }\n\n    normalized.in_app = !// determine if an exception came from outside of our app\n    // first we check the global includePaths list.\n    (\n      (!!this._globalOptions.includePaths.test &&\n        !this._globalOptions.includePaths.test(normalized.filename)) ||\n      // Now we check for fun, if the function name is Raven or TraceKit\n      /(Raven|TraceKit)\\./.test(normalized['function']) ||\n      // finally, we do a last ditch effort and check for raven.min.js\n      /raven\\.(min\\.)?js$/.test(normalized.filename)\n    );\n\n    return normalized;\n  },\n\n  _processException: function(type, message, fileurl, lineno, frames, options) {\n    var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n    if (\n      !!this._globalOptions.ignoreErrors.test &&\n      (this._globalOptions.ignoreErrors.test(message) ||\n        this._globalOptions.ignoreErrors.test(prefixedMessage))\n    ) {\n      return;\n    }\n\n    var stacktrace;\n\n    if (frames && frames.length) {\n      fileurl = frames[0].filename || fileurl;\n      // Sentry expects frames oldest to newest\n      // and JS sends them as newest to oldest\n      frames.reverse();\n      stacktrace = {frames: frames};\n    } else if (fileurl) {\n      stacktrace = {\n        frames: [\n          {\n            filename: fileurl,\n            lineno: lineno,\n            in_app: true\n          }\n        ]\n      };\n    }\n\n    if (\n      !!this._globalOptions.ignoreUrls.test &&\n      this._globalOptions.ignoreUrls.test(fileurl)\n    ) {\n      return;\n    }\n\n    if (\n      !!this._globalOptions.whitelistUrls.test &&\n      !this._globalOptions.whitelistUrls.test(fileurl)\n    ) {\n      return;\n    }\n\n    var data = objectMerge(\n      {\n        // sentry.interfaces.Exception\n        exception: {\n          values: [\n            {\n              type: type,\n              value: message,\n              stacktrace: stacktrace\n            }\n          ]\n        },\n        culprit: fileurl\n      },\n      options\n    );\n\n    // Fire away!\n    this._send(data);\n  },\n\n  _trimPacket: function(data) {\n    // For now, we only want to truncate the two different messages\n    // but this could/should be expanded to just trim everything\n    var max = this._globalOptions.maxMessageLength;\n    if (data.message) {\n      data.message = truncate(data.message, max);\n    }\n    if (data.exception) {\n      var exception = data.exception.values[0];\n      exception.value = truncate(exception.value, max);\n    }\n\n    var request = data.request;\n    if (request) {\n      if (request.url) {\n        request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n      }\n      if (request.Referer) {\n        request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n      }\n    }\n\n    if (data.breadcrumbs && data.breadcrumbs.values)\n      this._trimBreadcrumbs(data.breadcrumbs);\n\n    return data;\n  },\n\n  /**\n     * Truncate breadcrumb values (right now just URLs)\n     */\n  _trimBreadcrumbs: function(breadcrumbs) {\n    // known breadcrumb properties with urls\n    // TODO: also consider arbitrary prop values that start with (https?)?://\n    var urlProps = ['to', 'from', 'url'],\n      urlProp,\n      crumb,\n      data;\n\n    for (var i = 0; i < breadcrumbs.values.length; ++i) {\n      crumb = breadcrumbs.values[i];\n      if (\n        !crumb.hasOwnProperty('data') ||\n        !isObject(crumb.data) ||\n        objectFrozen(crumb.data)\n      )\n        continue;\n\n      data = objectMerge({}, crumb.data);\n      for (var j = 0; j < urlProps.length; ++j) {\n        urlProp = urlProps[j];\n        if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n          data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n        }\n      }\n      breadcrumbs.values[i].data = data;\n    }\n  },\n\n  _getHttpData: function() {\n    if (!this._hasNavigator && !this._hasDocument) return;\n    var httpData = {};\n\n    if (this._hasNavigator && _navigator.userAgent) {\n      httpData.headers = {\n        'User-Agent': navigator.userAgent\n      };\n    }\n\n    if (this._hasDocument) {\n      if (_document.location && _document.location.href) {\n        httpData.url = _document.location.href;\n      }\n      if (_document.referrer) {\n        if (!httpData.headers) httpData.headers = {};\n        httpData.headers.Referer = _document.referrer;\n      }\n    }\n\n    return httpData;\n  },\n\n  _resetBackoff: function() {\n    this._backoffDuration = 0;\n    this._backoffStart = null;\n  },\n\n  _shouldBackoff: function() {\n    return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n  },\n\n  /**\n     * Returns true if the in-process data payload matches the signature\n     * of the previously-sent data\n     *\n     * NOTE: This has to be done at this level because TraceKit can generate\n     *       data from window.onerror WITHOUT an exception object (IE8, IE9,\n     *       other old browsers). This can take the form of an \"exception\"\n     *       data object with a single frame (derived from the onerror args).\n     */\n  _isRepeatData: function(current) {\n    var last = this._lastData;\n\n    if (\n      !last ||\n      current.message !== last.message || // defined for captureMessage\n      current.culprit !== last.culprit // defined for captureException/onerror\n    )\n      return false;\n\n    // Stacktrace interface (i.e. from captureMessage)\n    if (current.stacktrace || last.stacktrace) {\n      return isSameStacktrace(current.stacktrace, last.stacktrace);\n    } else if (current.exception || last.exception) {\n      // Exception interface (i.e. from captureException/onerror)\n      return isSameException(current.exception, last.exception);\n    }\n\n    return true;\n  },\n\n  _setBackoffState: function(request) {\n    // If we are already in a backoff state, don't change anything\n    if (this._shouldBackoff()) {\n      return;\n    }\n\n    var status = request.status;\n\n    // 400 - project_id doesn't exist or some other fatal\n    // 401 - invalid/revoked dsn\n    // 429 - too many requests\n    if (!(status === 400 || status === 401 || status === 429)) return;\n\n    var retry;\n    try {\n      // If Retry-After is not in Access-Control-Expose-Headers, most\n      // browsers will throw an exception trying to access it\n      retry = request.getResponseHeader('Retry-After');\n      retry = parseInt(retry, 10) * 1000; // Retry-After is returned in seconds\n    } catch (e) {\n      /* eslint no-empty:0 */\n    }\n\n    this._backoffDuration = retry\n      ? // If Sentry server returned a Retry-After value, use it\n        retry\n      : // Otherwise, double the last backoff duration (starts at 1 sec)\n        this._backoffDuration * 2 || 1000;\n\n    this._backoffStart = now();\n  },\n\n  _send: function(data) {\n    var globalOptions = this._globalOptions;\n\n    var baseData = {\n        project: this._globalProject,\n        logger: globalOptions.logger,\n        platform: 'javascript'\n      },\n      httpData = this._getHttpData();\n\n    if (httpData) {\n      baseData.request = httpData;\n    }\n\n    // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n    if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n    data = objectMerge(baseData, data);\n\n    // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n    data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n    data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n    // Send along our own collected metadata with extra\n    data.extra['session:duration'] = now() - this._startTime;\n\n    if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n      // intentionally make shallow copy so that additions\n      // to breadcrumbs aren't accidentally sent in this request\n      data.breadcrumbs = {\n        values: [].slice.call(this._breadcrumbs, 0)\n      };\n    }\n\n    // If there are no tags/extra, strip the key from the payload alltogther.\n    if (isEmptyObject(data.tags)) delete data.tags;\n\n    if (this._globalContext.user) {\n      // sentry.interfaces.User\n      data.user = this._globalContext.user;\n    }\n\n    // Include the environment if it's defined in globalOptions\n    if (globalOptions.environment) data.environment = globalOptions.environment;\n\n    // Include the release if it's defined in globalOptions\n    if (globalOptions.release) data.release = globalOptions.release;\n\n    // Include server_name if it's defined in globalOptions\n    if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n    if (isFunction(globalOptions.dataCallback)) {\n      data = globalOptions.dataCallback(data) || data;\n    }\n\n    // Why??????????\n    if (!data || isEmptyObject(data)) {\n      return;\n    }\n\n    // Check if the request should be filtered or not\n    if (\n      isFunction(globalOptions.shouldSendCallback) &&\n      !globalOptions.shouldSendCallback(data)\n    ) {\n      return;\n    }\n\n    // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n    // so drop requests until \"cool-off\" period has elapsed.\n    if (this._shouldBackoff()) {\n      this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n      return;\n    }\n\n    if (typeof globalOptions.sampleRate === 'number') {\n      if (Math.random() < globalOptions.sampleRate) {\n        this._sendProcessedPayload(data);\n      }\n    } else {\n      this._sendProcessedPayload(data);\n    }\n  },\n\n  _getUuid: function() {\n    return uuid4();\n  },\n\n  _sendProcessedPayload: function(data, callback) {\n    var self = this;\n    var globalOptions = this._globalOptions;\n\n    if (!this.isSetup()) return;\n\n    // Try and clean up the packet before sending by truncating long values\n    data = this._trimPacket(data);\n\n    // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n    // but this would require copying an un-truncated copy of the data packet, which can be\n    // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n    if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n      this._logDebug('warn', 'Raven dropped repeat event: ', data);\n      return;\n    }\n\n    // Send along an event_id if not explicitly passed.\n    // This event_id can be used to reference the error within Sentry itself.\n    // Set lastEventId after we know the error should actually be sent\n    this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n    // Store outbound payload after trim\n    this._lastData = data;\n\n    this._logDebug('debug', 'Raven about to send:', data);\n\n    var auth = {\n      sentry_version: '7',\n      sentry_client: 'raven-js/' + this.VERSION,\n      sentry_key: this._globalKey\n    };\n\n    if (this._globalSecret) {\n      auth.sentry_secret = this._globalSecret;\n    }\n\n    var exception = data.exception && data.exception.values[0];\n    this.captureBreadcrumb({\n      category: 'sentry',\n      message: exception\n        ? (exception.type ? exception.type + ': ' : '') + exception.value\n        : data.message,\n      event_id: data.event_id,\n      level: data.level || 'error' // presume error unless specified\n    });\n\n    var url = this._globalEndpoint;\n    (globalOptions.transport || this._makeRequest).call(this, {\n      url: url,\n      auth: auth,\n      data: data,\n      options: globalOptions,\n      onSuccess: function success() {\n        self._resetBackoff();\n\n        self._triggerEvent('success', {\n          data: data,\n          src: url\n        });\n        callback && callback();\n      },\n      onError: function failure(error) {\n        self._logDebug('error', 'Raven transport failed to send: ', error);\n\n        if (error.request) {\n          self._setBackoffState(error.request);\n        }\n\n        self._triggerEvent('failure', {\n          data: data,\n          src: url\n        });\n        error = error || new Error('Raven send failed (no additional details provided)');\n        callback && callback(error);\n      }\n    });\n  },\n\n  _makeRequest: function(opts) {\n    var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n    if (!request) return;\n\n    // if browser doesn't support CORS (e.g. IE7), we are out of luck\n    var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n    if (!hasCORS) return;\n\n    var url = opts.url;\n\n    if ('withCredentials' in request) {\n      request.onreadystatechange = function() {\n        if (request.readyState !== 4) {\n          return;\n        } else if (request.status === 200) {\n          opts.onSuccess && opts.onSuccess();\n        } else if (opts.onError) {\n          var err = new Error('Sentry error code: ' + request.status);\n          err.request = request;\n          opts.onError(err);\n        }\n      };\n    } else {\n      request = new XDomainRequest();\n      // xdomainrequest cannot go http -> https (or vice versa),\n      // so always use protocol relative\n      url = url.replace(/^https?:/, '');\n\n      // onreadystatechange not supported by XDomainRequest\n      if (opts.onSuccess) {\n        request.onload = opts.onSuccess;\n      }\n      if (opts.onError) {\n        request.onerror = function() {\n          var err = new Error('Sentry error code: XDomainRequest');\n          err.request = request;\n          opts.onError(err);\n        };\n      }\n    }\n\n    // NOTE: auth is intentionally sent as part of query string (NOT as custom\n    //       HTTP header) so as to avoid preflight CORS requests\n    request.open('POST', url + '?' + urlencode(opts.auth));\n    request.send(stringify(opts.data));\n  },\n\n  _logDebug: function(level) {\n    if (this._originalConsoleMethods[level] && this.debug) {\n      // In IE<10 console methods do not have their own 'apply' method\n      Function.prototype.apply.call(\n        this._originalConsoleMethods[level],\n        this._originalConsole,\n        [].slice.call(arguments, 1)\n      );\n    }\n  },\n\n  _mergeContext: function(key, context) {\n    if (isUndefined(context)) {\n      delete this._globalContext[key];\n    } else {\n      this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n    }\n  }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js.  Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n  collectWindowErrors: true,\n  debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n  typeof window !== 'undefined'\n    ? window\n    : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n  if (typeof document === 'undefined' || document.location == null) return '';\n\n  return document.location.href;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n *   TraceKit.report.subscribe(function(stackInfo) { ... })\n *   TraceKit.report.unsubscribe(function(stackInfo) { ... })\n *   TraceKit.report(exception)\n *   try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n *   - Firefox: full stack trace with line numbers, plus column number\n *              on top frame; column number is not guaranteed\n *   - Opera:   full stack trace with line and column numbers\n *   - Chrome:  full stack trace with line and column numbers\n *   - Safari:  line and column number for the top frame only; some frames\n *              may be missing, and column number is not guaranteed\n *   - IE:      line and column number for the top frame only; some frames\n *              may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n *   - IE5.5+ (only 8.0 tested)\n *   - Firefox 0.9+ (only 3.5+ tested)\n *   - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n *     Exceptions Have Stacktrace to be enabled in opera:config)\n *   - Safari 3+ (only 4+ tested)\n *   - Chrome 1+ (only 5+ tested)\n *   - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n  var handlers = [],\n    lastArgs = null,\n    lastException = null,\n    lastExceptionStack = null;\n\n  /**\n     * Add a crash handler.\n     * @param {Function} handler\n     */\n  function subscribe(handler) {\n    installGlobalHandler();\n    handlers.push(handler);\n  }\n\n  /**\n     * Remove a crash handler.\n     * @param {Function} handler\n     */\n  function unsubscribe(handler) {\n    for (var i = handlers.length - 1; i >= 0; --i) {\n      if (handlers[i] === handler) {\n        handlers.splice(i, 1);\n      }\n    }\n  }\n\n  /**\n     * Remove all crash handlers.\n     */\n  function unsubscribeAll() {\n    uninstallGlobalHandler();\n    handlers = [];\n  }\n\n  /**\n     * Dispatch stack information to all handlers.\n     * @param {Object.<string, *>} stack\n     */\n  function notifyHandlers(stack, isWindowError) {\n    var exception = null;\n    if (isWindowError && !TraceKit.collectWindowErrors) {\n      return;\n    }\n    for (var i in handlers) {\n      if (handlers.hasOwnProperty(i)) {\n        try {\n          handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n        } catch (inner) {\n          exception = inner;\n        }\n      }\n    }\n\n    if (exception) {\n      throw exception;\n    }\n  }\n\n  var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n  /**\n     * Ensures all global unhandled exceptions are recorded.\n     * Supported by Gecko and IE.\n     * @param {string} message Error message.\n     * @param {string} url URL of script that generated the exception.\n     * @param {(number|string)} lineNo The line number at which the error\n     * occurred.\n     * @param {?(number|string)} colNo The column number at which the error\n     * occurred.\n     * @param {?Error} ex The actual Error object.\n     */\n  function traceKitWindowOnError(message, url, lineNo, colNo, ex) {\n    var stack = null;\n\n    if (lastExceptionStack) {\n      TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n        lastExceptionStack,\n        url,\n        lineNo,\n        message\n      );\n      processLastException();\n    } else if (ex && utils.isError(ex)) {\n      // non-string `ex` arg; attempt to extract stack trace\n\n      // New chrome and blink send along a real error object\n      // Let's just report that like a normal error.\n      // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n      stack = TraceKit.computeStackTrace(ex);\n      notifyHandlers(stack, true);\n    } else {\n      var location = {\n        url: url,\n        line: lineNo,\n        column: colNo\n      };\n\n      var name = undefined;\n      var msg = message; // must be new var or will modify original `arguments`\n      var groups;\n      if ({}.toString.call(message) === '[object String]') {\n        var groups = message.match(ERROR_TYPES_RE);\n        if (groups) {\n          name = groups[1];\n          msg = groups[2];\n        }\n      }\n\n      location.func = UNKNOWN_FUNCTION;\n\n      stack = {\n        name: name,\n        message: msg,\n        url: getLocationHref(),\n        stack: [location]\n      };\n      notifyHandlers(stack, true);\n    }\n\n    if (_oldOnerrorHandler) {\n      return _oldOnerrorHandler.apply(this, arguments);\n    }\n\n    return false;\n  }\n\n  function installGlobalHandler() {\n    if (_onErrorHandlerInstalled) {\n      return;\n    }\n    _oldOnerrorHandler = _window.onerror;\n    _window.onerror = traceKitWindowOnError;\n    _onErrorHandlerInstalled = true;\n  }\n\n  function uninstallGlobalHandler() {\n    if (!_onErrorHandlerInstalled) {\n      return;\n    }\n    _window.onerror = _oldOnerrorHandler;\n    _onErrorHandlerInstalled = false;\n    _oldOnerrorHandler = undefined;\n  }\n\n  function processLastException() {\n    var _lastExceptionStack = lastExceptionStack,\n      _lastArgs = lastArgs;\n    lastArgs = null;\n    lastExceptionStack = null;\n    lastException = null;\n    notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n  }\n\n  /**\n     * Reports an unhandled Error to TraceKit.\n     * @param {Error} ex\n     * @param {?boolean} rethrow If false, do not re-throw the exception.\n     * Only used for window.onerror to not cause an infinite loop of\n     * rethrowing.\n     */\n  function report(ex, rethrow) {\n    var args = _slice.call(arguments, 1);\n    if (lastExceptionStack) {\n      if (lastException === ex) {\n        return; // already caught by an inner catch block, ignore\n      } else {\n        processLastException();\n      }\n    }\n\n    var stack = TraceKit.computeStackTrace(ex);\n    lastExceptionStack = stack;\n    lastException = ex;\n    lastArgs = args;\n\n    // If the stack trace is incomplete, wait for 2 seconds for\n    // slow slow IE to see if onerror occurs or not before reporting\n    // this exception; otherwise, we will end up with an incomplete\n    // stack trace\n    setTimeout(function() {\n      if (lastException === ex) {\n        processLastException();\n      }\n    }, stack.incomplete ? 2000 : 0);\n\n    if (rethrow !== false) {\n      throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n    }\n  }\n\n  report.subscribe = subscribe;\n  report.unsubscribe = unsubscribe;\n  report.uninstall = unsubscribeAll;\n  return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n *   s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n *   s.name              - exception name\n *   s.message           - exception message\n *   s.stack[i].url      - JavaScript or HTML file URL\n *   s.stack[i].func     - function name, or empty for anonymous functions (if guessing did not work)\n *   s.stack[i].args     - arguments passed to the function, if known\n *   s.stack[i].line     - line number, if known\n *   s.stack[i].column   - column number, if known\n *\n * Supports:\n *   - Firefox:  full stack trace with line numbers and unreliable column\n *               number on top frame\n *   - Opera 10: full stack trace with line and column numbers\n *   - Opera 9-: full stack trace with line numbers\n *   - Chrome:   full stack trace with line and column numbers\n *   - Safari:   line and column number for the topmost stacktrace element\n *               only\n *   - IE:       no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n *  * in Safari, some methods may be missing from the stack trace;\n *  * in IE, the topmost function in the stack trace will always be the\n *    caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n  // Contents of Exception in various browsers.\n  //\n  // SAFARI:\n  // ex.message = Can't find variable: qq\n  // ex.line = 59\n  // ex.sourceId = 580238192\n  // ex.sourceURL = http://...\n  // ex.expressionBeginOffset = 96\n  // ex.expressionCaretOffset = 98\n  // ex.expressionEndOffset = 98\n  // ex.name = ReferenceError\n  //\n  // FIREFOX:\n  // ex.message = qq is not defined\n  // ex.fileName = http://...\n  // ex.lineNumber = 59\n  // ex.columnNumber = 69\n  // ex.stack = ...stack trace... (see the example below)\n  // ex.name = ReferenceError\n  //\n  // CHROME:\n  // ex.message = qq is not defined\n  // ex.name = ReferenceError\n  // ex.type = not_defined\n  // ex.arguments = ['aa']\n  // ex.stack = ...stack trace...\n  //\n  // INTERNET EXPLORER:\n  // ex.message = ...\n  // ex.name = ReferenceError\n  //\n  // OPERA:\n  // ex.message = ...message... (see the example below)\n  // ex.name = ReferenceError\n  // ex.opera#sourceloc = 11  (pretty much useless, duplicates the info in ex.message)\n  // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n  /**\n     * Computes stack trace information from the stack property.\n     * Chrome and Gecko use this property.\n     * @param {Error} ex\n     * @return {?Object.<string, *>} Stack trace information.\n     */\n  function computeStackTraceFromStackProp(ex) {\n    if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n    var chrome = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,\n      gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i,\n      winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,\n      // Used to additionally parse URL/line/column from eval frames\n      geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,\n      chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,\n      lines = ex.stack.split('\\n'),\n      stack = [],\n      submatch,\n      parts,\n      element,\n      reference = /^(.*) is undefined$/.exec(ex.message);\n\n    for (var i = 0, j = lines.length; i < j; ++i) {\n      if ((parts = chrome.exec(lines[i]))) {\n        var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n        var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n        if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n          // throw out eval line/column and use top-most line/column number\n          parts[2] = submatch[1]; // url\n          parts[3] = submatch[2]; // line\n          parts[4] = submatch[3]; // column\n        }\n        element = {\n          url: !isNative ? parts[2] : null,\n          func: parts[1] || UNKNOWN_FUNCTION,\n          args: isNative ? [parts[2]] : [],\n          line: parts[3] ? +parts[3] : null,\n          column: parts[4] ? +parts[4] : null\n        };\n      } else if ((parts = winjs.exec(lines[i]))) {\n        element = {\n          url: parts[2],\n          func: parts[1] || UNKNOWN_FUNCTION,\n          args: [],\n          line: +parts[3],\n          column: parts[4] ? +parts[4] : null\n        };\n      } else if ((parts = gecko.exec(lines[i]))) {\n        var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n        if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n          // throw out eval line/column and use top-most line number\n          parts[3] = submatch[1];\n          parts[4] = submatch[2];\n          parts[5] = null; // no column when eval\n        } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n          // FireFox uses this awesome columnNumber property for its top frame\n          // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n          // so adding 1\n          // NOTE: this hack doesn't work if top-most frame is eval\n          stack[0].column = ex.columnNumber + 1;\n        }\n        element = {\n          url: parts[3],\n          func: parts[1] || UNKNOWN_FUNCTION,\n          args: parts[2] ? parts[2].split(',') : [],\n          line: parts[4] ? +parts[4] : null,\n          column: parts[5] ? +parts[5] : null\n        };\n      } else {\n        continue;\n      }\n\n      if (!element.func && element.line) {\n        element.func = UNKNOWN_FUNCTION;\n      }\n\n      stack.push(element);\n    }\n\n    if (!stack.length) {\n      return null;\n    }\n\n    return {\n      name: ex.name,\n      message: ex.message,\n      url: getLocationHref(),\n      stack: stack\n    };\n  }\n\n  /**\n     * Adds information about the first frame to incomplete stack traces.\n     * Safari and IE require this to get complete data on the first frame.\n     * @param {Object.<string, *>} stackInfo Stack trace information from\n     * one of the compute* methods.\n     * @param {string} url The URL of the script that caused an error.\n     * @param {(number|string)} lineNo The line number of the script that\n     * caused an error.\n     * @param {string=} message The error generated by the browser, which\n     * hopefully contains the name of the object that caused the error.\n     * @return {boolean} Whether or not the stack information was\n     * augmented.\n     */\n  function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n    var initial = {\n      url: url,\n      line: lineNo\n    };\n\n    if (initial.url && initial.line) {\n      stackInfo.incomplete = false;\n\n      if (!initial.func) {\n        initial.func = UNKNOWN_FUNCTION;\n      }\n\n      if (stackInfo.stack.length > 0) {\n        if (stackInfo.stack[0].url === initial.url) {\n          if (stackInfo.stack[0].line === initial.line) {\n            return false; // already in stack trace\n          } else if (\n            !stackInfo.stack[0].line &&\n            stackInfo.stack[0].func === initial.func\n          ) {\n            stackInfo.stack[0].line = initial.line;\n            return false;\n          }\n        }\n      }\n\n      stackInfo.stack.unshift(initial);\n      stackInfo.partial = true;\n      return true;\n    } else {\n      stackInfo.incomplete = true;\n    }\n\n    return false;\n  }\n\n  /**\n     * Computes stack trace information by walking the arguments.caller\n     * chain at the time the exception occurred. This will cause earlier\n     * frames to be missed but is the only way to get any stack trace in\n     * Safari and IE. The top frame is restored by\n     * {@link augmentStackTraceWithInitialElement}.\n     * @param {Error} ex\n     * @return {?Object.<string, *>} Stack trace information.\n     */\n  function computeStackTraceByWalkingCallerChain(ex, depth) {\n    var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n      stack = [],\n      funcs = {},\n      recursion = false,\n      parts,\n      item,\n      source;\n\n    for (\n      var curr = computeStackTraceByWalkingCallerChain.caller;\n      curr && !recursion;\n      curr = curr.caller\n    ) {\n      if (curr === computeStackTrace || curr === TraceKit.report) {\n        // console.log('skipping internal function');\n        continue;\n      }\n\n      item = {\n        url: null,\n        func: UNKNOWN_FUNCTION,\n        line: null,\n        column: null\n      };\n\n      if (curr.name) {\n        item.func = curr.name;\n      } else if ((parts = functionName.exec(curr.toString()))) {\n        item.func = parts[1];\n      }\n\n      if (typeof item.func === 'undefined') {\n        try {\n          item.func = parts.input.substring(0, parts.input.indexOf('{'));\n        } catch (e) {}\n      }\n\n      if (funcs['' + curr]) {\n        recursion = true;\n      } else {\n        funcs['' + curr] = true;\n      }\n\n      stack.push(item);\n    }\n\n    if (depth) {\n      // console.log('depth is ' + depth);\n      // console.log('stack is ' + stack.length);\n      stack.splice(0, depth);\n    }\n\n    var result = {\n      name: ex.name,\n      message: ex.message,\n      url: getLocationHref(),\n      stack: stack\n    };\n    augmentStackTraceWithInitialElement(\n      result,\n      ex.sourceURL || ex.fileName,\n      ex.line || ex.lineNumber,\n      ex.message || ex.description\n    );\n    return result;\n  }\n\n  /**\n     * Computes a stack trace for an exception.\n     * @param {Error} ex\n     * @param {(string|number)=} depth\n     */\n  function computeStackTrace(ex, depth) {\n    var stack = null;\n    depth = depth == null ? 0 : +depth;\n\n    try {\n      stack = computeStackTraceFromStackProp(ex);\n      if (stack) {\n        return stack;\n      }\n    } catch (e) {\n      if (TraceKit.debug) {\n        throw e;\n      }\n    }\n\n    try {\n      stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n      if (stack) {\n        return stack;\n      }\n    } catch (e) {\n      if (TraceKit.debug) {\n        throw e;\n      }\n    }\n    return {\n      name: ex.name,\n      message: ex.message,\n      url: getLocationHref()\n    };\n  }\n\n  computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n  computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n  return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n  for (var i = 0; i < haystack.length; ++i) {\n    if (haystack[i] === needle) return i;\n  }\n  return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n  return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n  var err = {\n    // These properties are implemented as magical getters and don't show up in for in\n    stack: value.stack,\n    message: value.message,\n    name: value.name\n  };\n\n  for (var i in value) {\n    if (Object.prototype.hasOwnProperty.call(value, i)) {\n      err[i] = value[i];\n    }\n  }\n\n  return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n  var stack = [];\n  var keys = [];\n\n  if (cycleReplacer == null) {\n    cycleReplacer = function(key, value) {\n      if (stack[0] === value) {\n        return '[Circular ~]';\n      }\n      return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n    };\n  }\n\n  return function(key, value) {\n    if (stack.length > 0) {\n      var thisPos = indexOf(stack, this);\n      ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n      ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n      if (~indexOf(stack, value)) {\n        value = cycleReplacer.call(this, key, value);\n      }\n    } else {\n      stack.push(value);\n    }\n\n    return replacer == null\n      ? value instanceof Error ? stringifyError(value) : value\n      : replacer.call(this, key, value);\n  };\n}\n","function RavenConfigError(message) {\n  this.name = 'RavenConfigError';\n  this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var wrapMethod = function(console, level, callback) {\n  var originalConsoleLevel = console[level];\n  var originalConsole = console;\n\n  if (!(level in console)) {\n    return;\n  }\n\n  var sentryLevel = level === 'warn' ? 'warning' : level;\n\n  console[level] = function() {\n    var args = [].slice.call(arguments);\n\n    var msg = '' + args.join(' ');\n    var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n    if (level === 'assert') {\n      if (args[0] === false) {\n        // Default browsers message\n        msg = 'Assertion failed: ' + (args.slice(1).join(' ') || 'console.assert');\n        data.extra.arguments = args.slice(1);\n        callback && callback(msg, data);\n      }\n    } else {\n      callback && callback(msg, data);\n    }\n\n    // this fails for some browsers. :(\n    if (originalConsoleLevel) {\n      // IE9 doesn't allow calling apply on console functions directly\n      // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n      Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n    }\n  };\n};\n\nmodule.exports = {\n  wrapMethod: wrapMethod\n};\n","const {\n  adminUrl,\n  ajaxUrl,\n  env,\n  hubspotBaseUrl,\n  leadinPluginVersion,\n  plugins,\n  phpVersion,\n  portalId,\n  theme,\n  wpVersion,\n} = window.leadinConfig;\n\nconst i18n = window.leadinI18n;\n\nexport {\n  adminUrl,\n  ajaxUrl,\n  env,\n  hubspotBaseUrl,\n  i18n,\n  leadinPluginVersion,\n  plugins,\n  phpVersion,\n  portalId,\n  theme,\n  wpVersion,\n};\n","import Raven from 'raven-js';\nimport {\n  env,\n  phpVersion,\n  wpVersion,\n  leadinPluginVersion,\n  portalId,\n  plugins,\n} from '../constants/leadinConfig';\n\nexport function configureRaven() {\n  if (env !== 'prod') {\n    return;\n  }\n\n  Raven.config(\n    'https://[email protected]/1',\n    {\n      instrument: {\n        tryCatch: false,\n      },\n    }\n  ).install();\n\n  Raven.setTagsContext({\n    leadin: leadinPluginVersion,\n    php: phpVersion,\n    wordpress: wpVersion,\n  });\n\n  Raven.setUserContext({\n    hub: portalId,\n    plugins: Object.keys(plugins)\n      .map(name => `${name}#${plugins[name].Version}`)\n      .join(','),\n  });\n}\n\nexport default Raven;\n","import { hubspotBaseUrl, portalId, i18n } from './constants/leadinConfig';\n\nfunction addMenuItem(text, href) {\n  jQuery('#toplevel_page_leadin')\n    .find('li')\n    .last()\n    .before(`<li><a href=\"${href}\" target=\"_blank\">${text}</a></li>`);\n}\n\nexport function addExternalLinks() {\n  const chatflowsUrl = `${hubspotBaseUrl}/chatflows/${portalId}`;\n  const emailUrl = `${hubspotBaseUrl}/email/${portalId}`;\n  addMenuItem(i18n.chatflows, chatflowsUrl);\n  addMenuItem(i18n.email, emailUrl);\n}\n","export function log(...args) {\n  try {\n    if (window.localStorage.LEADIN_DEBUG) {\n      args.unshift('[Leadin]');\n      console.log(...args);\n    }\n  } catch (e) {\n    //\n  }\n}\n","export const domElements = {\n  iframe: '#leadin-iframe',\n  allMenuButtons:\n    '.toplevel_page_leadin > a, .toplevel_page_leadin > ul > li > a',\n  subMenuButtons: '.toplevel_page_leadin > ul > li',\n};\n","import EventBus from './EventBus';\nimport { log } from '../utils';\nimport { domElements } from '../constants/selectors';\nimport { hubspotBaseUrl } from '../constants/leadinConfig';\nimport Raven from './Raven';\n\nconst eventBus = new EventBus();\nconst callbacks = [];\n\nfunction postMessageObject(message) {\n  log('Posting message');\n  log(JSON.stringify(message));\n  jQuery(domElements.iframe)[0].contentWindow.postMessage(\n    JSON.stringify(message),\n    hubspotBaseUrl\n  );\n}\n\nfunction reply(message, response) {\n  if (!response) {\n    response = 'Message Received';\n  }\n  const newMessage = Object.assign({}, message);\n  newMessage.response = response;\n  postMessageObject(newMessage);\n}\n\nfunction handleResponse(message) {\n  callbacks[message._callbackId - 1](message.response);\n}\n\nfunction handleMessage(message) {\n  log('Received message');\n  log(JSON.stringify(message));\n\n  if (message.response && message._callbackId) {\n    handleResponse(message);\n  } else {\n    Object.keys(message).forEach(key => {\n      eventBus.trigger(key, [message[key], reply.bind(null, message)]);\n    });\n  }\n}\n\nfunction handleMessageEvent(event) {\n  if (event.origin === hubspotBaseUrl) {\n    try {\n      const data = JSON.parse(event.data);\n      handleMessage(data);\n    } catch (e) {\n      // Error in parsing message\n    }\n  }\n}\n\nexport function postMessage(key, payload, onResponse, onTimeout, timeout) {\n  if (!timeout) {\n    timeout = 500;\n  }\n\n  const timeoutCallback = function() {\n    Raven.captureMessage(\n      `LeadinWordpressPlugin postMessage response timeout on message key: ${key}`\n    );\n    onTimeout();\n  };\n\n  const timeoutId = setTimeout(Raven.wrap(timeoutCallback), timeout);\n\n  const message = {};\n  message[key] = payload;\n  message._callbackId = callbacks.push((...args) => {\n    clearTimeout(timeoutId);\n    onResponse(...args);\n  });\n  postMessageObject(message);\n}\n\nexport function onMessage(key, callback) {\n  eventBus.on(key, (...args) => {\n    callback.apply(null, args.slice(1));\n  });\n}\n\nexport function initInterframe() {\n  window.addEventListener('message', handleMessageEvent);\n}\n","import Raven from './Raven';\n\nexport default class EventBus {\n  constructor() {\n    this.bus = jQuery({});\n  }\n\n  trigger(...args) {\n    this.bus.trigger(...args);\n  }\n\n  on(event, callback) {\n    this.bus.on(event, Raven.wrap(callback));\n  }\n}\n","import Raven from '../lib/Raven';\nimport { ajaxUrl } from '../constants/leadinConfig';\n\nfunction makeRequest(action, method, payload, success, error) {\n  const url = `${ajaxUrl}?action=${action}`;\n  const ajaxPayload = {\n    url,\n    method,\n    contentType: 'application/json',\n    success:\n      typeof success === 'function'\n        ? Raven.wrap(data => success(JSON.parse(data)))\n        : undefined,\n    error: Raven.wrap(jqXHR => {\n      let message;\n      try {\n        message = JSON.parse(jqXHR.responseText).error;\n      } catch (e) {\n        message = jqXHR.responseText;\n      }\n\n      Raven.captureMessage(\n        `AJAX request failed with code ${jqXHR.status}: ${message}`\n      );\n\n      if (typeof error === 'function') {\n        error();\n      }\n    }),\n  };\n\n  if (payload) {\n    ajaxPayload.data = JSON.stringify(payload);\n  }\n\n  jQuery.ajax(ajaxPayload);\n}\n\nfunction post(action, payload, success, error) {\n  return makeRequest(action, 'POST', payload, success, error);\n}\n\nfunction get(action, success, error) {\n  return makeRequest(action, 'GET', null, success, error);\n}\n\nconst getPortal = () => get('leadin_get_portal');\nlet portalPollingTimeout;\nlet stopPortalPolling = false;\n\nexport function startPortalIdPolling() {\n  portalPollingTimeout = setTimeout(() => {\n    getPortal(data => {\n      if (data.portalId) {\n        location.reload(true);\n      } else if (!stopPortalPolling) {\n        startPortalIdPolling();\n      }\n    }, startPortalIdPolling);\n  }, 5000);\n}\n\nexport function clearPortalIdPolling() {\n  clearTimeout(portalPollingTimeout);\n  stopPortalPolling = true;\n}\n\nexport const connect = (portalId, success, error) =>\n  post('leadin_registration_ajax', { portalId }, success, error);\n\nexport const disconnect = post.bind(null, 'leadin_disconnect_ajax', {});\nexport const getDomain = get.bind(null, 'leadin_get_domain');\nexport const markAsOutdated = get.bind(null, 'leadin_mark_outdated');\n","import { onMessage, postMessage } from '../lib/Interframe';\n\nfunction createHandler(key) {\n  return onMessage.bind(null, key);\n}\n\nexport const onClearQueryParam = createHandler('leadin_clear_query_param');\nexport const onConnect = createHandler('leadin_connect_portal');\nexport const onDisableNavigation = createHandler('leadin_disable_navigation');\nexport const onDisconnect = createHandler('leadin_disconnect_portal');\nexport const onEnterFullScreen = createHandler('leadin_enter_fullscreen');\nexport const onExitFullScreen = createHandler('leadin_exit_fullscreen');\nexport const onGetAssetsPayload = createHandler('leadin_get_assets_payload');\nexport const onGetDomain = createHandler('leadin_get_wp_domain');\nexport const onInitNavigation = createHandler('leadin_init_navigation');\nexport const onInterframeReady = createHandler('leadin_interframe_ready');\nexport const onMarkAsOutdated = createHandler('leadin_mark_outdated');\nexport const onPageReload = createHandler('leadin_page_reload');\nexport const onUpgrade = createHandler('leadin_upgrade');\n\nexport function changeRoute(route) {\n  postMessage('leadin_change_route', route, null, () => location.reload(true));\n}\n","import { domElements } from './constants/selectors';\nimport { changeRoute } from './api/hubspotPluginApi';\n\nexport function initNavigation() {\n  function setSelectedMenuItem() {\n    jQuery(domElements.subMenuButtons).removeClass('current');\n    const pageParam = window.location.search.match(/\\?page=leadin_?\\w*/)[0]; // filter page query param\n    const selectedElement = jQuery(`a[href=\"admin.php${pageParam}\"]`);\n    selectedElement.parent().addClass('current');\n  }\n\n  function handleNavigation() {\n    const appRoute = window.location.search.match(/page=leadin_?(\\w*)/)[1];\n    changeRoute(appRoute);\n    setSelectedMenuItem();\n  }\n\n  function handleClick() {\n    // Don't interrupt modifier keys\n    if (event.metaKey || event.altKey || event.shiftKey) {\n      return;\n    }\n    window.history.pushState(null, null, jQuery(this).attr('href'));\n    handleNavigation();\n    event.preventDefault();\n  }\n\n  // Browser back and forward events navigation\n  window.addEventListener('popstate', handleNavigation);\n\n  // Menu Navigation\n  jQuery(domElements.allMenuButtons).click(handleClick);\n}\n\nexport function disableNavigation() {\n  jQuery(domElements.allMenuButtons).off('click');\n}\n","export default {\n  'genesis-sample': {\n    formsStyle: {\n      fontFamily: 'Source Sans Pro',\n      labelTextColor: '#333333',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#0073e5',\n    },\n    chatStyle: {\n      accentColor: '#0073e5',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#0073e5',\n    },\n    onExitLeadFlowStyle: {\n      color: '#0073e5',\n    },\n  },\n  'academy-pro': {\n    formsStyle: {\n      fontFamily: 'PT Sans',\n      labelTextColor: '#222222',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#e22c2f',\n    },\n    chatStyle: {\n      accentColor: '#e22c2f',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#e22c2f',\n    },\n    onExitLeadFlowStyle: {\n      color: '#e22c2f',\n    },\n  },\n  'agency-pro': {\n    formsStyle: {\n      fontFamily: 'EB Garamond',\n      labelTextColor: '#666666',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#d7c603',\n    },\n    chatStyle: {\n      accentColor: '#d7c603',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#d7c603',\n    },\n    onExitLeadFlowStyle: {\n      color: '#d7c603',\n    },\n  },\n  'agentpress-pro': {\n    formsStyle: {\n      fontFamily: 'Roboto',\n      labelTextColor: '#1a212b',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#d23836',\n    },\n    chatStyle: {\n      accentColor: '#d23836',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#d23836',\n    },\n    onExitLeadFlowStyle: {\n      color: '#d23836',\n    },\n  },\n  'altitude-pro': {\n    formsStyle: {\n      fontFamily: 'Ek Mukta',\n      labelTextColor: '#000000',\n      labelTextSize: '20px',\n      submitFontColor: '#ffffff',\n      submitColor: '#079bc4',\n    },\n    chatStyle: {\n      accentColor: '#079bc4',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#079bc4',\n    },\n    onExitLeadFlowStyle: {\n      color: '#079bc4',\n    },\n  },\n  'ambiance-pro': {\n    formsStyle: {\n      fontFamily: 'Merriweather',\n      labelTextColor: '#333333',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#e12727',\n    },\n    chatStyle: {\n      accentColor: '#e12727',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#e12727',\n    },\n    onExitLeadFlowStyle: {\n      color: '#e12727',\n    },\n  },\n  'atmosphere-pro': {\n    formsStyle: {\n      fontFamily: 'Lato',\n      labelTextColor: '#333333',\n      labelTextSize: '20px',\n      submitFontColor: '#ffffff',\n      submitColor: '#333333',\n    },\n    chatStyle: {\n      accentColor: '#333333',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#333333',\n    },\n    onExitLeadFlowStyle: {\n      color: '#333333',\n    },\n  },\n  'author-pro': {\n    formsStyle: {\n      fontFamily: 'Lato',\n      labelTextColor: '#000000',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#000000',\n    },\n    chatStyle: {\n      accentColor: '#000000',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#000000',\n    },\n    onExitLeadFlowStyle: {\n      color: '#000000',\n    },\n  },\n  'authority-pro': {\n    formsStyle: {\n      fontFamily: 'Libre Baskerville',\n      labelTextColor: '#333333',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#000cff',\n    },\n    chatStyle: {\n      accentColor: '#000cff',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#000cff',\n    },\n    onExitLeadFlowStyle: {\n      color: '#000cff',\n    },\n  },\n  'beautiful-pro': {\n    formsStyle: {\n      fontFamily: 'Lato',\n      labelTextColor: '#666666',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#e5554e',\n    },\n    chatStyle: {\n      accentColor: '#e5554e',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#e5554e',\n    },\n    onExitLeadFlowStyle: {\n      color: '#e5554e',\n    },\n  },\n  'breakthrough-pro': {\n    formsStyle: {\n      fontFamily: 'Alegreya Sans',\n      labelTextColor: '#4e4756',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#4a4f9b',\n    },\n    chatStyle: {\n      accentColor: '#4a4f9b',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#4a4f9b',\n    },\n    onExitLeadFlowStyle: {\n      color: '#4a4f9b',\n    },\n  },\n  'cafe-pro': {\n    formsStyle: {\n      fontFamily: 'Crimson Text',\n      labelTextColor: '#000000',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#000000',\n    },\n    chatStyle: {\n      accentColor: '#000000',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#000000',\n    },\n    onExitLeadFlowStyle: {\n      color: '#000000',\n    },\n  },\n  'daily-dish-pro': {\n    formsStyle: {\n      fontFamily: 'Cormorant',\n      labelTextColor: '#000000',\n      labelTextSize: '20px',\n      submitFontColor: '#ffffff',\n      submitColor: '#d9037f',\n    },\n    chatStyle: {\n      accentColor: '#d9037f',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#d9037f',\n    },\n    onExitLeadFlowStyle: {\n      color: '#d9037f',\n    },\n  },\n  'digital-pro': {\n    formsStyle: {\n      fontFamily: 'Lora',\n      labelTextColor: '#5b5e5e',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#e85555',\n    },\n    chatStyle: {\n      accentColor: '#e85555',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#e85555',\n    },\n    onExitLeadFlowStyle: {\n      color: '#e85555',\n    },\n  },\n  'education-pro': {\n    formsStyle: {\n      fontFamily: 'Roboto Condensed',\n      labelTextColor: '#444444',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#78a7c8',\n    },\n    chatStyle: {\n      accentColor: '#78a7c8',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#78a7c8',\n    },\n    onExitLeadFlowStyle: {\n      color: '#78a7c8',\n    },\n  },\n  'eleven40-pro': {\n    formsStyle: {\n      fontFamily: 'Lora',\n      labelTextColor: '#000000',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#ed702b',\n    },\n    chatStyle: {\n      accentColor: '#ed702b',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#ed702b',\n    },\n    onExitLeadFlowStyle: {\n      color: '#ed702b',\n    },\n  },\n  'enterprise-pro': {\n    formsStyle: {\n      fontFamily: 'Lato',\n      labelTextColor: '#777777',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#31b2ed',\n    },\n    chatStyle: {\n      accentColor: '#31b2ed',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#31b2ed',\n    },\n    onExitLeadFlowStyle: {\n      color: '#31b2ed',\n    },\n  },\n  'essence-pro': {\n    formsStyle: {\n      fontFamily: 'Alegreya Sans',\n      labelTextColor: '#333333',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#be8100',\n    },\n    chatStyle: {\n      accentColor: '#be8100',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#be8100',\n    },\n    onExitLeadFlowStyle: {\n      color: '#be8100',\n    },\n  },\n  'executive-pro': {\n    formsStyle: {\n      fontFamily: 'Open Sans',\n      labelTextColor: '#222222',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#64c9ea',\n    },\n    chatStyle: {\n      accentColor: '#64c9ea',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#64c9ea',\n    },\n    onExitLeadFlowStyle: {\n      color: '#64c9ea',\n    },\n  },\n  'generate-pro': {\n    formsStyle: {\n      fontFamily: 'Source Sans Pro',\n      labelTextColor: '#222222',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#eb232f',\n    },\n    chatStyle: {\n      accentColor: '#eb232f',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#eb232f',\n    },\n    onExitLeadFlowStyle: {\n      color: '#eb232f',\n    },\n  },\n  'infinity-pro': {\n    formsStyle: {\n      fontFamily: 'Cormorant Garamond',\n      labelTextColor: '#000000',\n      labelTextSize: '22px',\n      submitFontColor: '#ffffff',\n      submitColor: '#d43c67',\n    },\n    chatStyle: {\n      accentColor: '#d43c67',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#d43c67',\n    },\n    onExitLeadFlowStyle: {\n      color: '#d43c67',\n    },\n  },\n  'interior-pro': {\n    formsStyle: {\n      fontFamily: 'Lora',\n      labelTextColor: '#777777',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#009092',\n    },\n    chatStyle: {\n      accentColor: '#009092',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#009092',\n    },\n    onExitLeadFlowStyle: {\n      color: '#009092',\n    },\n  },\n  'lifestyle-pro': {\n    formsStyle: {\n      fontFamily: 'Droid Sans',\n      labelTextColor: '#767673',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#27968b',\n    },\n    chatStyle: {\n      accentColor: '#27968b',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#27968b',\n    },\n    onExitLeadFlowStyle: {\n      color: '#27968b',\n    },\n  },\n  'magazine-pro': {\n    formsStyle: {\n      fontFamily: 'Roboto',\n      labelTextColor: '#222222',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#008285',\n    },\n    chatStyle: {\n      accentColor: '#008285',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#008285',\n    },\n    onExitLeadFlowStyle: {\n      color: '#008285',\n    },\n  },\n  'metro-pro': {\n    formsStyle: {\n      fontFamily: 'Helvetica Neue',\n      labelTextColor: '#222222',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#f96e5b',\n    },\n    chatStyle: {\n      accentColor: '#f96e5b',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#f96e5b',\n    },\n    onExitLeadFlowStyle: {\n      color: '#f96e5b',\n    },\n  },\n  'minimum-pro': {\n    formsStyle: {\n      fontFamily: 'Roboto Slab',\n      labelTextColor: '#333333',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#0ebfe9',\n    },\n    chatStyle: {\n      accentColor: '#0ebfe9',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#0ebfe9',\n    },\n    onExitLeadFlowStyle: {\n      color: '#0ebfe9',\n    },\n  },\n  'modern-studio-pro': {\n    formsStyle: {\n      fontFamily: 'Lato',\n      labelTextColor: '#000000',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#000000',\n    },\n    chatStyle: {\n      accentColor: '#000000',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#000000',\n    },\n    onExitLeadFlowStyle: {\n      color: '#000000',\n    },\n  },\n  'monochrome-pro': {\n    formsStyle: {\n      fontFamily: 'Muli',\n      labelTextColor: '#000000',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#000000',\n    },\n    chatStyle: {\n      accentColor: '#000000',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#000000',\n    },\n    onExitLeadFlowStyle: {\n      color: '#000000',\n    },\n  },\n  'news-pro': {\n    formsStyle: {\n      fontFamily: 'Raleway',\n      labelTextColor: '#666666',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#ff0000',\n    },\n    chatStyle: {\n      accentColor: '#ff0000',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#ff0000',\n    },\n    onExitLeadFlowStyle: {\n      color: '#ff0000',\n    },\n  },\n  'no-sidebar-pro': {\n    formsStyle: {\n      fontFamily: 'Lato',\n      labelTextColor: '#333333',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#333333',\n    },\n    chatStyle: {\n      accentColor: '#333333',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#333333',\n    },\n    onExitLeadFlowStyle: {\n      color: '#333333',\n    },\n  },\n  'outfitter-pro': {\n    formsStyle: {\n      fontFamily: 'Noto Sans',\n      labelTextColor: '#546e7a',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#000000',\n    },\n    chatStyle: {\n      accentColor: '#000000',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#000000',\n    },\n    onExitLeadFlowStyle: {\n      color: '#000000',\n    },\n  },\n  'outreach-pro': {\n    formsStyle: {\n      fontFamily: 'Lato',\n      labelTextColor: '#333333',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#6ab446',\n    },\n    chatStyle: {\n      accentColor: '#6ab446',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#6ab446',\n    },\n    onExitLeadFlowStyle: {\n      color: '#6ab446',\n    },\n  },\n  'parallax-pro': {\n    formsStyle: {\n      fontFamily: 'Cormorant Garamond',\n      labelTextColor: '#000000',\n      labelTextSize: '22px',\n      submitFontColor: '#ffffff',\n      submitColor: '#00a0af',\n    },\n    chatStyle: {\n      accentColor: '#00a0af',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#00a0af',\n    },\n    onExitLeadFlowStyle: {\n      color: '#00a0af',\n    },\n  },\n  'revolution-pro': {\n    formsStyle: {\n      fontFamily: 'Noto Serif SC',\n      labelTextColor: '#000000',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#008080',\n    },\n    chatStyle: {\n      accentColor: '#008080',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#008080',\n    },\n    onExitLeadFlowStyle: {\n      color: '#008080',\n    },\n  },\n  'sixteen-nine-pro': {\n    formsStyle: {\n      fontFamily: 'Roboto',\n      labelTextColor: '#000000',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#1dbec0',\n    },\n    chatStyle: {\n      accentColor: '#1dbec0',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#1dbec0',\n    },\n    onExitLeadFlowStyle: {\n      color: '#1dbec0',\n    },\n  },\n  'smart-passive-income-pro': {\n    formsStyle: {\n      fontFamily: 'Roboto',\n      labelTextColor: '#333333',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#0e763c',\n    },\n    chatStyle: {\n      accentColor: '#0e763c',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#0e763c',\n    },\n    onExitLeadFlowStyle: {\n      color: '#0e763c',\n    },\n  },\n  'wellness-pro': {\n    formsStyle: {\n      fontFamily: 'Open Sans',\n      labelTextColor: '#000000',\n      labelTextSize: '16px',\n      submitFontColor: '#ffffff',\n      submitColor: '#5da44f',\n    },\n    chatStyle: {\n      accentColor: '#5da44f',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#5da44f',\n    },\n    onExitLeadFlowStyle: {\n      color: '#5da44f',\n    },\n  },\n  'workstation-pro': {\n    formsStyle: {\n      fontFamily: 'Baskerville',\n      labelTextColor: '#222222',\n      labelTextSize: '18px',\n      submitFontColor: '#ffffff',\n      submitColor: '#ff4800',\n    },\n    chatStyle: {\n      accentColor: '#ff4800',\n    },\n    onScrollLeadFlowStyle: {\n      color: '#ff4800',\n    },\n    onExitLeadFlowStyle: {\n      color: '#ff4800',\n    },\n  },\n};\n","import {\n  onInterframeReady,\n  onConnect,\n  onDisconnect,\n  onMarkAsOutdated,\n  onUpgrade,\n  onPageReload,\n  onInitNavigation,\n  onDisableNavigation,\n  onClearQueryParam,\n  onGetDomain,\n  onGetAssetsPayload,\n  onEnterFullScreen,\n  onExitFullScreen,\n} from './api/hubspotPluginApi';\nimport {\n  connect,\n  disconnect,\n  markAsOutdated,\n  getDomain,\n  clearPortalIdPolling,\n} from './api/wordpressApi';\nimport { adminUrl, theme } from './constants/leadinConfig';\nimport { initNavigation, disableNavigation } from './navigation';\nimport enterFullScreen, { exitFullScreen } from './fullscreen';\nimport themes from './constants/themes';\n\nonInterframeReady((message, reply) => {\n  reply('Interframe Ready');\n});\n\nonConnect((portalId, reply) => {\n  connect(\n    portalId,\n    () => {\n      clearPortalIdPolling();\n      reply({ success: true });\n    },\n    reply.bind(null, { success: false })\n  );\n});\n\nonDisconnect((message, reply) => {\n  disconnect(\n    reply.bind(null, { success: true }),\n    reply.bind(null, { success: false })\n  );\n});\n\nonMarkAsOutdated((message, reply) => {\n  markAsOutdated(reply);\n});\n\nonUpgrade((message, reply) => {\n  reply();\n  location.href = `${adminUrl}plugins.php`;\n});\n\nonPageReload((message, reply) => {\n  reply();\n  window.location.reload(true);\n});\n\nonInitNavigation((message, reply) => {\n  reply();\n  initNavigation();\n});\n\nonDisableNavigation((message, reply) => {\n  reply();\n  disableNavigation();\n});\n\nonClearQueryParam((message, reply) => {\n  reply();\n  let currentWindowLocation = window.location.toString();\n  if (currentWindowLocation.indexOf('?') > 0) {\n    currentWindowLocation = currentWindowLocation.substring(\n      0,\n      currentWindowLocation.indexOf('?')\n    );\n  }\n  const newWindowLocation = `${currentWindowLocation}?page=leadin`;\n  window.history.pushState({}, '', newWindowLocation);\n});\n\nonGetDomain((message, reply) => {\n  getDomain(data => {\n    if (data.domain) {\n      reply(data.domain);\n    }\n  });\n});\n\nonGetAssetsPayload((message, reply) => {\n  reply({ payload: themes[theme] });\n});\n\nonEnterFullScreen((message, reply) => {\n  reply();\n  enterFullScreen();\n});\n\nonExitFullScreen((message, reply) => {\n  reply();\n  exitFullScreen();\n});\n","import { domElements } from './constants/selectors';\n\nexport default function enterFullScreen() {\n  jQuery(domElements.iframe).addClass('leadin-iframe-fullscreen');\n}\n\nexport function exitFullScreen() {\n  jQuery(domElements.iframe).removeClass('leadin-iframe-fullscreen');\n}\n","import Raven, { configureRaven } from './lib/Raven';\nimport { addExternalLinks } from './menu';\nimport { portalId } from './constants/leadinConfig';\nimport { initInterframe } from './lib/Interframe';\nimport { startPortalIdPolling } from './api/wordpressApi';\nimport './handlers';\n\nfunction main() {\n  initInterframe();\n\n  // Enable App Navigation only when viewing the plugin\n  if (window.location.search.indexOf('page=leadin') !== -1) {\n    if (!portalId) {\n      startPortalIdPolling();\n    }\n  }\n\n  jQuery(document).ready(addExternalLinks);\n}\n\nconfigureRaven();\nRaven.context(main);\n"],"sourceRoot":""}
  • leadin/trunk/tests/inc/test-leadin-mark-outdated.php

    r2097340 r2112768  
    1515     */
    1616    public function test_mark_outdated_ajax() {
    17 
    1817        $this->assertFalse( get_option( 'leadin_outdated_version', false ) );
     18        $response;
    1919
    2020        try {
    21             mark_outdated_ajax();
    22         } catch ( WPDieException $e ) {}
     21            leadin_mark_outdated_ajax();
     22        } catch ( WPDieException $e ) {
     23            $response = $e;
     24        }
    2325
    24         $this->assertTrue( isset( $e ) );
    25         $array = json_decode( $e->getMessage() );
     26        $this->assertTrue( isset( $response ) );
     27        $array = json_decode( $response->getMessage() );
    2628        $this->assertTrue( isset( $array ) );
    2729        $this->assertTrue( get_option( 'leadin_outdated_version', false ) );
Note: See TracChangeset for help on using the changeset viewer.